当前位置: 首页 > 知识库问答 >
问题:

PHP cURL登录到一个站点

麻桐
2023-03-14

我带着很大的希望来到这里解决我的问题。我有这个网站,我想登录并访问一个会员专页。所以基本上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>";
..........

我得到的结果是:

登录HTTP/1.1 200 OK Server:nginx日期:2014年6月12日星期四14:21:01 GMT内容类型:应用程序/json传输编码:分块连接:保持活动保持活动:超时=20缓存控制:无存储,无缓存,必须重新验证缓存控制:后检查=0,预检查=0过期:Wed,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;charset=utf-8传输编码:分块连接:保持活动保持活动:超时=20位置:/login?backurl=/my/HTTP/1.1 200 OK Server:nginx日期:2014年6月12日星期四14:21:03 GMT内容类型:text/html;charset=utf-8传输编码:分块连接:保持活动保持活动:超时=20变化:接受编码变化:接受编码集Cookie:PHPSESSID=qdg80d48dd17hl879h86v9ruo5;路径=/;HttpOnly过期时间:1981年11月19日星期四08:52:00 GMT缓存控制:无存储,无缓存,必须重新验证,后检查=0,预检查=0布拉格语:无缓存登录我们从不共享或披露您的信息!

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

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

共有1个答案

堵琨
2023-03-14

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

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

所以你的代码序列应该是:

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

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

 类似资料:
  • 有一个简单的网站,我们称之为http://foo.com/,使用一个简单的用户/通行证表单将post请求发送到http://foo.com/login.php登录用户。 如何在另一个网站中创建一个链接,比如说http://foo_autologin.com/,它将在http://foo.com/上用预先确定的密码登录,并在另一个标签中打开它,登录?

  • 问题内容: 使用Jsoup登录网站需要什么?我相信我的代码是正确的,但是我从未使用Jsoup成功登录到网站,因此我可能会丢失一些东西。这是我的代码: 返回一个显示未成功登录的登录页面。有一个名为的输入值,我认为这可能是为什么它不起作用的原因。这个值会随着时间的推移而上升。我运行了两次代码,时间变量返回了和。我的代码需要大约10秒钟的时间来打印文档,因此,变量在发送发布请求时是否已经更改?我不确定这

  • 问题内容: 我已经广泛阅读了有关此操作的信息,并尝试了许多不同的版本,但无法使其正常工作。 基本上,我只想登录ConEdison网站并抓取我的帐单记录。这是我所拥有的: 我知道该信息是正确的(尽管我不知道是否真的需要传递没有值的数据参数)。 我没有任何错误,只是打印了登录页面(https://apps.coned.com/cemyaccount/NonMemberPages/Login.aspx?

  • 我最近创建了一个wordpress主题,希望在主页上有自己的登录区域。下面是我正在使用的代码,但由于某些原因,它不太管用。它允许我登录,但当我登录时,我会被重定向到示例。com/wordpress/wordpress/而不是示例。com/wordpress/我不知道额外的子目录是从哪里来的。代码“有效”,因为如果我在获得404'd后手动更改URL,我就登录了,但我不明白它为什么要这么做。

  • 我试图发布一个请求登录到使用Python中的请求模块的网站,但它不是真的工作。我是新来的...所以我不知道我是否应该制作我的用户名和密码cookie或者我发现的某种类型的HTTP授权(??)。 所以现在,我想我应该用“post”和cookies。。。。 我有一种感觉,我做错了饼干的事...我不知道。 如果登录不正确,主页的标题应该显示为“Locationary.com”,如果登录不正确,则应显示为

  • 问题内容: 我是使用cURL的新手,它很难为其找到好的资源。我想做的是通过curl来登录到远程站点,然后执行登录表单,然后将其发送回去。 我拥有的代码似乎无效,仅尝试显示网站的主页。 我究竟做错了什么。在此工作之后,我想重定向到另一个页面并从我的网站获取内容。 问题答案: 我已经放弃了好一阵子,但后来又重新讨论了。由于这个问题是定期查看。最终,这就是我最终使用的对我有用的东西。 更新:此代码绝不打