我们如何在cURL中维护会话?
我有一个代码,发送一个站点的登录详细信息并成功登录,我需要在站点维护会话继续.
这是我用于使用cURL登录网站的代码
bleuscyther.. 16
这是我发现这个链接的最佳方式:
下面的文字是博客文章内容的"混合"版本:
$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()
办?它结束当前会话并存储会话数据.显然,当多个脚本与会话一起玩时,PHP不喜欢它,因此,它会锁定它.放置session_write_close可确保存储当前会话,以便您可以检索并使用它.
如果您不使用session_write_close()
新会话,则将生成ID,而不是使用当前会话ID.
此外PHPSESSID应该由会话变量的名称来代替.根据OWSAP的建议,它应该像anId一样更通用.
有时您需要发送带有帖子的用户代理,因此我包含了CURLOPT_USERAGENT
参数.
这是我发现这个链接的最佳方式:
下面的文字是博客文章内容的"混合"版本:
$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()
办?它结束当前会话并存储会话数据.显然,当多个脚本与会话一起玩时,PHP不喜欢它,因此,它会锁定它.放置session_write_close可确保存储当前会话,以便您可以检索并使用它.
如果您不使用session_write_close()
新会话,则将生成ID,而不是使用当前会话ID.
此外PHPSESSID应该由会话变量的名称来代替.根据OWSAP的建议,它应该像anId一样更通用.
有时您需要发送带有帖子的用户代理,因此我包含了CURLOPT_USERAGENT
参数.
这就是你如何使用会话进行CURL
//initial request with login data $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, "username=XXXXX&password=XXXXX"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name'); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp'); //could be empty, but cause problems on some hosts $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } //another request preserving the session curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/profile'); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_POSTFIELDS, ""); $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); }
我在ImpressPages上看过这个