我们如何在 cURL 中维护 session ?
我有一个代码可以发送网站的登录详细信息并成功登录 我需要在网站上维护 session 才能继续。
这是我用来使用 cURL 登录网站的代码
<?php
$socket = curl_init();
curl_setopt($socket, CURLOPT_URL, "http://www.XXXXXXX.com");
curl_setopt($socket, CURLOPT_REFERER, "http://www.XXXXXXX.com");
curl_setopt($socket, CURLOPT_POST, true);
curl_setopt($socket, CURLOPT_USERAGENT, $agent);
curl_setopt($socket, CURLOPT_POSTFIELDS, "form_logusername=XXXXX&form_logpassword=XXXXX");
curl_setopt($socket, CURLOPT_COOKIESESSION, true);
curl_setopt($socket, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($socket, CURLOPT_COOKIEFILE, "cookies.txt");
$data = curl_exec($socket);
curl_close($socket);
?>
最佳答案
这是我找到的最好的方法 link :
下面的文字是 blogpost 内容的“混合”版本:
$useragent = $_SERVER['HTTP_USER_AGENT'];
$strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';
session_write_close();
$ch = curl_init();
$ch = curl_init($rssFeedLink);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERAGENT, $useragent);
curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );
$response = curl_exec($ch);
curl_close($ch);
session_write_close()
有什么作用?它结束当前 session 并存储 session 数据。显然,PHP 不喜欢多个脚本同时处理 session ,因此它锁定了 session 。放置 session_write_close 可确保存储当前 session ,以便您可以检索并使用它。
如果您不使用 session_write_close()
,将生成一个新的 session ID,而不是使用当前 session ID。
此外,PHPSESSID 应替换为 session 变量的名称。根据OWSAP recommandations它应该是更一般的东西,比如 anId。
有时您需要在帖子中发送用户代理,因此我包含了 CURLOPT_USERAGENT
参数。
关于php - 如何在 php 中维护 cURL 中的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424714/