cURL cookie 值

Posted

技术标签:

【中文标题】cURL cookie 值【英文标题】:cURL cookie value [closed] 【发布时间】:2012-02-26 21:58:44 【问题描述】:

我正在尝试从以下站点下载音乐循环文件:looperman.com。我已经注册为用户,我正在尝试使用 cURL 下载循环。当您登录 looperman.com 时,设置了一些 cookie,但通过消除过程,我注意到服务器在登录时看到您所需的唯一名称是“loopermanlooperman”。

我已获取该 cookie 的值,并将其设置为变量。然后我像这样将它传递给网站:

$sessid = 'somehashedvaluehere';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: loopermanlooperman=$sessid;"));
curl_setopt($ch, CURLOPT_URL, "http://www.looperman.com/loops/detail/$pageID");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo $response;

当我回显响应时,我看到 cookie 尚未设置,网站仍然认为我未登录。我做错了什么? Looperman 是使用 CodeIgniter 构建的。我想知道他们是否有一些保护措施来防止设置这样的 cookie?

///更新///

我尝试了 COOKIE_JAR 和 CURLOPT_COOKIE。 cookie 仍未设置。我从另一个 Stack Overflow 帖子中找到了这个脚本,这似乎让我大部分时间都在那里,但仍然设置了 cookie。这里是:

$loginUrl = 'http://www.looperman.com/account/login/';
$loginFields = array('user_email' => 'login@site.com', 'user_password' => 'password');

getUrl($loginUrl, 'post', $loginFields); 
//now you're logged in and a session cookie was generated

$remote_page_content = getUrl('http://www.looperman.com/loops/detail/200');
echo $remote_page_content;

  function getUrl($url, $method='', $vars='') 
    $ch = curl_init();
    if ($method == 'post') 
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'D:\wamp2\www\sandbox\cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'D:\wamp2\www\sandbox\cookie.txt');
    $buffer = curl_exec($ch);
    curl_close($ch);
    return $buffer;
  

返回时,D:\wamp2\www\sandbox\cookie.txt 的内容为:

网景 HTTP Cookie 文件 http://curl.haxx.se/rfc/cookie_spec.html 这个文件是由 libcurl 生成的!编辑风险自负。 .looperman.com 真/假 1329245288 loopermancspr 147f3f08a0b50f7aa527789e360abbc8 .looperman.com TRUE / FALSE 1328467688 loopermanlooperman rX1UOdqyPEKkZ7HT0x8dSLk7g9yf5sSmg%2B7zj66hLM9LSmS1z4nqFO2zkEkqsUqKEwNMvEiExqSKoU2%2BfVsxlf3C9VyucMWt41TJVDtElUUIQrZxv0BmwZYP6JCJrY7wcT1%2FO7kKxRu8YI97YD%2BWdxX3jnWu2Zme9jg%2FMggp3%2BE%2BY%2FFiAorh36FR1zTbSY66VJVj7268WgMy6KNdJ1DxieypwaMb2HYGpBMsQRxcI6RawnOIEdjbaPKYuf8hVy40

但是 looperman 仍然没有看到我已登录:(

【问题讨论】:

试试这个cookie jar 我上面的编辑使用了 CURLOPT_COOKIEJAR 和 CURLOPT_COOKIEFILE。好像没有效果。 【参考方案1】:

您应该使用CURLOPT_COOKIE 而不是CURLOPT_HTTPHEADER 来设置请求中发送的cookie 值。

curl_setopt($ch, CURLOPT_COOKIE, "loopermanlooperman=$sessid")

CURLOPT_COOKIE

HTTP 请求中使用的“Cookie:”标头的内容。请注意,多个 cookie 用分号后跟空格分隔(例如,“fruit=apple; colour=red”)

http://www.php.net/manual/en/function.curl-setopt.php/

它确实让 CURL 发送 cookie。尝试请求一个像这样输出标题内容的脚本;

<?php
echo "Your cookies \n";
print_r( $_COOKIE);
?>

可能是网站正在检查您的标头中的推荐或主机。您可以随时尝试查看在浏览器中发出的请求(在 chrome 中转到 Spanner -> 工具 -> 开发者工具 -> 网络,现在请求页面并单击列表中的请求。应该显示所有标题)

【讨论】:

我试过了,没用:curl_setopt($ch, CURLOPT_COOKIE, "fruit=apple") 另外,记得阅读网站的条款和条件,看看是否允许您以这种方式访问​​文件。

以上是关于cURL cookie 值的主要内容,如果未能解决你的问题,请参考以下文章

PHP 如何带上cookies模拟GET表单提交

是否可以使用 CURL 设置 cookie 内容?

在两个 curl 请求之间保存 cookie

php爬虫(curl) 模拟登陆获取cookie,然后使用cookie查看个人中心

如何使用 curl 将收到的 cookie 信息打印到标准输出?

php使用CURL不依赖COOKIEJAR获取COOKIE的方法