2014-02-27 87 views
0

我试图登录并从API返回的个人资料信息,在这里API是登录文件的一部分:登录使用PHP和卷曲

登录使用的帐户创建指定邮箱。需要现有的基于电子邮件的帐户。有效的登录会导致到/ 99/profile页面的重定向结果,以及新的sessionid cookie的生成。 sessionid保留用户登录并具有很长的持续时间(持续数周不活动)。

他们sugest的PHP代码:

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://99motos.apiary.io/accounts/login/"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=string&password=string"); 
$response = curl_exec($ch); 
curl_close($ch); 
var_dump($response); 
?> 

我用这个代码,改变了“CURLOPT_HEADER”为真,我代替我的帐户凭据的字符串。一切工作正常,它返回:

HTTP/1.1 302 FOUND Date: Wed, 26 Feb 2014 20:04:43 GMT Server: Apache/2.4.6 (Unix) OpenSSL/1.0.1f mod_wsgi/3.4 Python/2.7.6 Vary: Accept-Language,Cookie Content-Length: 0 Location: https://server.99motos.com/99/profile/ Content-Language: pt-br Set-Cookie: sessionid=n8eb7u29n4q7gapfw3b3hlo0q0koi9t0; expires=Wed, 12-Mar-2014 20:04:43 GMT; httponly; Max-Age=1209600; Path=/ Content-Type: text/html; charset=utf-8

有一个“位置”链接到个人资料页,但我怎样才能到的“https://server.99motos.com/99/profile/”的信息?我知道它会返回一个JSON,但每次尝试手动访问此链接时,它都会返回一个JSON,指出“用户不存在”,我认为这是由于会话ID。

在这个API,我们可以得到的代码来分析,这里是文档中的解释,

简介:

给出了基本的用户资料信息。尽管不幸的前缀,这是一个普通的帐户页面。用户必须登录(使用有效的sessionid cookie)才能访问此页面。该页面产生关于用户的一般“记账”信息,特别是返回用户是否已完成注册以成为“个人”(请求骑车人的用户)和“骑手”(接受订单请求的用户)以及该设备接收PUSH消息所需的信息存在。 first_login值已被弃用,并被替换为单独的is_individualis_rider值。

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://99motos.apiary.io/99/profile/"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
$response = curl_exec($ch); 
curl_close($ch); 

var_dump($response); 

但可能是以前的错误,它会返回 “用户不存在”,它应该返回:

200 (OK) 
{ 
    "id": 0, 
    "initial_name": "John Doe", 
    "first_login": True, 
    "is_individual": False, 
    "is_rider": False, 
    "need_device_info": True, 
} 

有人吗? ._。对于这个looong问题抱歉...谢谢。与卷曲

回答

0

使用后续的位置选项,以便它会自动重定向到URL指向您的Location:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

此外,使用cookie罐存储的cookie,并使用Cookie文件使用的cookie的要求,以避免会话相关的错误。

$__FILE_COOKIE = "c:/temp/cookie.txt"; // or /var/tmp/cookie.txt 
curl_setopt($ch, CURLOPT_COOKIEJAR, $__FILE_COOKIE); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $__FILE_COOKIE); 
+0

我不知道你在哪里可以使用cookie jar而不使用文件。在其他语言(如PERL)中可以。不确定PHP。购买方式,编辑/删除您以前的评论***,否则某些版主可以将其标记为标志!我很高兴看到它为你工作:-) –

+1

不得不删除评论。谢谢。 – Thyoity