Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在curl请求中传递PHP_会话_id_Php_Curl - Fatal编程技术网

如何在curl请求中传递PHP_会话_id

如何在curl请求中传递PHP_会话_id,php,curl,Php,Curl,我正在学习PHP,并尝试自动登录网站,然后在登录后将一些数据发布到另一个页面。我设法登录到该网站,当我试图发布数据时,我得到了一个“文档移动” 然后我分析了firebug中的头文件,意识到有一个PHP会话id,所以当我试图手动传递这个PHP会话id时,它工作了 所以我的问题是,如何在登录时自动获取sessionid,然后将其传递给第二个请求 这就是我的代码的样子: <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"

我正在学习PHP,并尝试自动登录网站,然后在登录后将一些数据发布到另一个页面。我设法登录到该网站,当我试图发布数据时,我得到了一个“文档移动”

然后我分析了firebug中的头文件,意识到有一个PHP会话id,所以当我试图手动传递这个PHP会话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);
?>

在所有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文件的想法。