PHP cURL登录到一个站点

PHP cURL登录到一个站点,php,curl,ssl,login,Php,Curl,Ssl,Login,我带着很大的希望来到这里解决我的问题。我有这个网站,我想登录并访问一个会员专页。所以基本上php代码使用cURL登录,然后打开一个只有成员的页面。下面是我使用的代码。但每次我尝试访问会员专页时,它都会要求我登录。因此它不会保存在我已经登录的会话或cookie中 .......... set_time_limit(0); $username = 'myemail@yahoo.com'; $password = 'mypassword'; $loginUrl = 'http://radaris.co

我带着很大的希望来到这里解决我的问题。我有这个网站,我想登录并访问一个会员专页。所以基本上php代码使用cURL登录,然后打开一个只有成员的页面。下面是我使用的代码。但每次我尝试访问会员专页时,它都会要求我登录。因此它不会保存在我已经登录的会话或cookie中

..........
set_time_limit(0);
$username = 'myemail@yahoo.com';
$password = 'mypassword';
$loginUrl = 'http://radaris.com/login/a.login';
$cookie_file_path = getcwd() . '/tmp/cookie.txt';


//init curl
$ch = curl_init();

//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);

// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 0);

//Set the post parameters
curl_setopt($ch, CURLOPT_HEADER, 1); // set to 0 to eliminate header info from response
curl_setopt($ch, CURLOPT_POSTFIELDS, 'email='.$username.'&password='.$password."&remember_me=1");

//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);

//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//execute the request (the login)
$store = curl_exec($ch);

echo "<font color=red>Login</font><br>".$store."<br><br>";



$postfields = array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://radaris.com/my/');
curl_setopt($ch, CURLOPT_HEADER, 1); // set to 0 to eliminate header info from response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, 1);
//Handle cookies for the login
// Edit: prior variable $postFields should be $postfields;
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$result = curl_exec($ch);


echo "<font color=red>Report</font><br>".$result."<br><br>";
..........
。。。。。。。。。。
设置时间限制(0);
$username='1myemail@yahoo.com';
$password='mypassword';
$loginUrl=http://radaris.com/login/a.login';
$cookie\u file\u path=getcwd()/tmp/cookie.txt';
//初始旋度
$ch=curl_init();
//设置要使用的URL
curl_setopt($ch,CURLOPT_URL,$loginUrl);
//启用HTTP POST
curl_setopt($ch,CURLOPT_POST,0);
//设置post参数
curl_setopt($ch,CURLOPT_头,1);//设置为0可从响应中删除标题信息
curl_setopt($ch,CURLOPT_POSTFIELDS,'email='.$username.&password='.$password.&memory_me=1”);
//处理登录的cookies
curl\u setopt($ch,CURLOPT\u COOKIEJAR,$cookie\u文件\u路径);
curl\u setopt($ch,CURLOPT\u COOKIEFILE,$cookie\u file\u path);
curl_setopt($ch,CURLOPT_AUTOREFERER,true);
//将CURLOPT_RETURNTRANSFER变量设置为1将强制卷曲
//不打印其查询结果。
//相反,它将以字符串返回值的形式返回结果
//从curl_exec()而不是通常的true/false。
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//执行请求(登录)
$store=curl\u exec($ch);
echo“Login
”$store.“

”; $postfields=array(); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,'https://radaris.com/my/'); curl_setopt($ch,CURLOPT_头,1);//设置为0可从响应中删除标题信息 curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); 卷曲设置($ch,卷曲设置桩,1); //处理登录的cookies //编辑:前面的变量$postFields应该是$postFields; curl_setopt($ch,CURLOPT_POSTFIELDS,$POSTFIELDS); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); $result=curl\u exec($ch); 回显“报告”
“$result。”

”; ..........
我得到的结果是:

登录HTTP/1.1 200 OK服务器:nginx日期:2014年6月12日星期四14:21:01 GMT内容类型:应用程序/json传输编码:分块 连接:保持活动保持活动:超时=20缓存控制:无存储, 无缓存,必须重新验证缓存控制:后检查=0,预检查=0 截止日期:2009年1月14日星期三19:00:00 GMT X-Robots-Tag:noindex {“/Rdf.bathror”:[[“无效的电子邮件或密码”,“登录表单”],[“检查” 您的电子邮件、登录电子邮件“]、[“检查您的密码”、“登录密码”]}

报告HTTP/1.1 302发现服务器:nginx日期:2014年6月12日星期四 14:21:03 GMT内容类型:text/html;字符集=utf-8传输编码: 分块连接:保持活动保持活动:超时=20位置: /登录?backurl=%2Fmy%2F HTTP/1.1 200正常服务器:nginx日期:Thu,12 2014年6月14:21:03 GMT内容类型:text/html;字符集=utf-8 传输编码:分块连接:保持活动保持活动: 超时=20变化:接受编码变化:接受编码集Cookie: PHPSESSID=qdg80d48dd17hl879h86v9ruo5;路径=/;HttpOnly过期时间:周四, 1981年11月19日08:52:00 GMT缓存控制:无存储,无缓存, 必须重新验证,后检查=0,预检查=0 Pragma:我们没有缓存登录 永远不要分享或透露你的信息

以上仅为标题。在第二个标题中,我再次获得登录表单以登录,这意味着我代码的第一位中的成功登录没有保存会话,这就是为什么当我访问仅限成员的页面时,它会要求登录


我真的非常想把这件事做好。提前感谢大家。

您使用的是两个单独的卷曲手柄,而您从未在第二个手柄中设置过饼干。每个curl句柄彼此完全独立,因此如果您不告诉第二个句柄您在第一个句柄中创建的cookiejar/cookiefile,您就永远不会实际使用从登录请求中获得的cookie

从技术上讲,每个句柄不必执行一个请求。一个句柄可以处理多个请求。唯一可能更容易启动新请求的时间是,如果您提出了一个复杂的自定义请求,并设置了许多选项,那么只需重新启动,而不必为下一个请求重置这些选项

因此,您的代码序列应该是:

init curl
set up cookiefile/cookiefar and other options
do login request
do next next request
close curl

如果不想重写,那么至少在第二个请求中添加cookiejar/cookiefile选项。

这很有意义。但我不知道使用什么选项,删除什么。你能给我一个简单易用的代码让我开始吗?你只需登录,然后在保持登录的同时转到第二个url。你能给我一个上面代码的例子,让我开始你给我的建议代码:init curl设置cookiefile/cookiefar和其他选项do login request do next request close谢谢你等着有人来帮我,因为我是个新手。