【问题标题】:How to pass PHP_session_id in curl request如何在 curl 请求中传递 PHP_session_id
【发布时间】: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);
?>

【问题讨论】:

标签: php curl


【解决方案1】:

在所有 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';

【讨论】:

  • 谢谢,我试过了,但它仍然返回“文档已移动”。我是否必须只从 cookie 中提取 phpsessid 并将其传递到标头中?
  • 文件 cookie.txt 将包含页面的所有 cookie。 Cookie.txt 也将包含 phpsessid。
  • 啊,我明白了。知道为什么它不起作用吗?我无法弄清楚我错过了什么,因为我理解根据您的回答获取和发送 cookie 文件的想法。
猜你喜欢
  • 1970-01-01
  • 2014-05-17
  • 2020-12-22
  • 2020-03-10
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
相关资源
最近更新 更多