【问题标题】:How to store multiple cookies through PHP Curl如何通过 PHP Curl 存储多个 cookie
【发布时间】:2010-04-18 05:25:50
【问题描述】:

'SOUP.IO' 不提供任何 API。所以我尝试使用'PHP Curl'通过PHP登录和提交数据。

我能够成功登录网站(通过 cUrl),但是当我尝试通过 cUrl 提交数据时,它给了我“无效用户”的错误。

当我尝试分析代码和网站时,我了解到 cUrl 仅获取 1-2 个 cookie 的值。当我在 FireFox 中打开同一页面时,它会显示与“SOUP.IO”相关的 6-7 个 cookie。

谁能指导我如何获取所有这 7 个 cookie 值。

以下 cookie 可通过 cUrl 获取:

soup_session_id

以下 cookie 在 Firefox 中显示(不是通过 cUrl):
__qca, __utma, __utmb, __utmc, __utmz

以下是我的 cUrl 代码:

<?php
session_start();

$cookie_file_path = getcwd()."/cookie/cookie.txt";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.soup.io');
curl_setopt($ch, CURLOPT_VERBOSE, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($ch, CURLOPT_HEADER, TRUE);

curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);


curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) FirePHP/0.4');


curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);


$result = curl_exec($ch);

curl_close($ch);


print_r($result);
?>

有人可以在这方面指导我吗

提前致谢

【问题讨论】:

    标签: php cookies curl


    【解决方案1】:

    这些额外的“下划线”cookie 看起来像 Google Analytics 或类似的跟踪 cookie,很可能是通过 Javascript 设置的。这就是他们在使用 cURL 时不显示的原因。我冒险猜测他们不是问题。

    【讨论】:

    • 我已经检查/分析了这些 cookie。我发现他们在这个过程中被使用了。所以 PHP cUrl 可以获取这些 javascript 生成的 cookie 的值。
    • @Ahmad 如果这些 cookie 确实是由 Javascript 生成的,并且它们确实对操作至关重要,那么恐怕你是不走运的。您基本上需要模拟整个支持 Javascript 的浏览器。如果他们不提供 API,您可能应该停止您正在做的事情。
    • 我同意,其中至少有 4 个正在跟踪 cookie,如果您有 Firefox,只需禁用 javascript 并查看这些 cookie 是否已设置。我认为在这种情况下你唯一真正重要的cookie是“soup_session_id”
    • @Sabeen 你是对的,但我认为,有三个 'soup.session_id', 'soup_user_id', 'soup_video_ad' 。禁用javascript后我可以登录。登录后我已经发布了我的代码,你能指导我哪里出错了。很抱歉访问您的网站,但我必须接受您比我更了解 cUrl 的一件事。提前致谢
    【解决方案2】:

    在我注册并进入该区域后,我注意到了几件事。我所有操作发生的域是 "user.soup.io" 而不是 "www.soup.io" ,这可能是您的无效用户错误背后的原因。登录完成后尝试将 url 设置为您自己的子域,看看它是如何进行的。还有你到底想发布什么数据?

    这可能不相关但soup.io似乎不使用HTTPS,所以为什么要使用:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    

    【讨论】:

      【解决方案3】:

      这是我的 curl 代码,在通过 cUrl 成功登录后,我试图使用它来向 soup.io 发送数据

      $storedata = array();
      $storedata["post[title]"]               = 'Phoonk 2 (16th April 2010)';
      $storedata["post[body]"]                = 'Ramgopal Varma\'s love for horror and supernatural continues. This time, in PHOONK 2, the team behind PHOONK promise more chills, more thrills and more screams. But what you get to hear at the end of the screening is a moan, since PHOONK 2 lacks the chills, thrills and screams that were the mainstay of its first part.';
      $storedata["post[tags]"]                = 'Bollywood Movie, Indian movie';
      $storedata["commit"]                    = 'Save';
      $storedata["post[id]"]                  = '';
      $storedata["post[type]"]                = 'PostRegular';
      $storedata["post[parent_id]"]           = '';
      $storedata["post[original_id]"]         = '';
      $storedata["post[edited_after_repost]"] = '';
      $store_post_str = '';
      foreach($storedata as $key => $value){
          $store_post_str .= $key.'='.urlencode($value).'&';
      }
      $store_post_str = substr($store_post_str, 0, -1);
      
      $ch2 = curl_init();
      
      curl_setopt($ch2, CURLOPT_URL, 'http://loekit.soup.io/save');
      curl_setopt($ch2, CURLOPT_VERBOSE, 1);
      
      curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, FALSE);
      
      curl_setopt($ch2, CURLOPT_HEADER, TRUE);
      
      curl_setopt($ch2, CURLOPT_ENCODING, 'gzip,deflate');
      
      //curl_setopt($ch2, CURLOPT_COOKIEJAR, $cookie_file_path);
      //curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_file_path);
      
      curl_setopt($ch2, CURLOPT_REFERER, 'http://loekit.soup.io/');
      curl_setopt($ch2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) FirePHP/0.4');
      curl_setopt($ch2, CURLOPT_MAXREDIRS, 10);
      curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, TRUE);
      curl_setopt($ch2, CURLOPT_RETURNTRANSFER, TRUE);
      curl_setopt($ch2, CURLOPT_POSTFIELDS, $store_post_str);
      curl_setopt($ch2, CURLOPT_POST, TRUE);
      

      【讨论】:

      • 你能不能把它格式化好一点.. 更好.. 把它移到原来的问题
      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2011-10-09
      • 2017-11-05
      相关资源
      最近更新 更多