如何在curl请求中传递PHP_会话_id
我正在学习PHP,并尝试自动登录网站,然后在登录后将一些数据发布到另一个页面。我设法登录到该网站,当我试图发布数据时,我得到了一个“文档移动” 然后我分析了firebug中的头文件,意识到有一个PHP会话id,所以当我试图手动传递这个PHP会话id时,它工作了 所以我的问题是,如何在登录时自动获取sessionid,然后将其传递给第二个请求 这就是我的代码的样子:如何在curl请求中传递PHP_会话_id,php,curl,Php,Curl,我正在学习PHP,并尝试自动登录网站,然后在登录后将一些数据发布到另一个页面。我设法登录到该网站,当我试图发布数据时,我得到了一个“文档移动” 然后我分析了firebug中的头文件,意识到有一个PHP会话id,所以当我试图手动传递这个PHP会话id时,它工作了 所以我的问题是,如何在登录时自动获取sessionid,然后将其传递给第二个请求 这就是我的代码的样子: <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"
<?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);
?>
在所有curl请求中添加到您的代码中
curl_setopt($ch, CURLOPT_COOKIEJAR, $full_path_to_cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $full_path_to_cookie_file);
比如说
$full_path_to_cookie_file= __DIR__.'/cookie.txt';
搜索PHPSESSID将提供。这可能会有帮助。这可能会有帮助,要遵循“文档移动”,您必须添加IIRC。有关更多选项,请参见。@OlafDietsche谢谢,我已签出该选项,并将其添加到代码中,但现在出现404错误。您在第一个请求后执行
curl\u close()
,然后创建一个新的请求。您是否完全初始化了第二个请求,包括cookie jar等。?当您继续使用第一个卷曲句柄时,它可能会起作用。谢谢,我试过了,但它仍然返回“文档已移动”。我是否必须从cookie中提取phpsessid并将其传递到标题中?cookie.txt文件将包含页面的所有cookie。Cookie.txt也将包含phpsessid。啊,我明白了。知道它为什么不起作用吗?我不知道我遗漏了什么,因为我理解了根据你的答案获取和发送cookie文件的想法。