【发布时间】:2016-10-03 08:47:00
【问题描述】:
我正在学习 PHP 并尝试自动登录网站,然后在登录后将一些数据发布到另一个页面。我设法登录到该网站,当我尝试发布数据时,我得到了“文档已移动”。
然后我分析了 firebug 中的 headers 并意识到有一个 PHP_session_id,所以当我尝试手动传递这个 PHP_session_id 时它起作用了。
所以我的问题是,我如何在登录时自动获取 sessionid,然后将其传递给我的第二个请求?
这是我的代码的样子:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/login-main.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"loginType=company&username=johndoe%40gmail.com&password=1234&company=test");
ob_start();
curl_exec ($ch);
ob_end_clean();
curl_close ($ch);
unset($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Host:www.example.com',
'Origin:http://www.example.com',
'Cookie:PHPSESSID=na6ivnsdfab206ktb453o2au07',
'Referer:http://www.example.com/bookings/'
));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/bookings.php");
curl_setopt($ch, CURLOPT_POSTFIELDS,
"start_date=&end_date=&type=instructor&b_type=&id=41");
$buf2 = curl_exec ($ch);
curl_close ($ch);
echo "<PRE>".htmlentities($buf2);
?>
【问题讨论】:
-
搜索 PHPSESSID 会得到stackoverflow.com/q/1370951/1741542。也许这会有所帮助。
-
要关注“文档已移动”,您必须添加
CURLOPT_FOLLOWLOCATION, IIRC。另请参阅curl.haxx.se/libcurl/c/curl_easy_setopt.html 了解更多选项。 -
@OlafDietsche 谢谢,我检查了,我已将其添加到我的代码中,但现在出现 404 错误。
-
您在第一个请求之后执行
curl_close(),然后创建一个新请求。是否完全初始化第二个请求,包括cookie jar 等?当您继续使用第一个 curl 句柄时,它可能会起作用。