【问题标题】:PHP curl: Can't get site content - cookies issue?PHP curl:无法获取网站内容 - cookie 问题?
【发布时间】:2012-05-11 10:09:28
【问题描述】:

我正在尝试获取此站点的内容:http://www.gratka.pl/,但我只收到以下内容:

* 即将 connect() 到 gratka.pl 端口 80
* 正在尝试 195.8.99.42... * 已连接
* 连接到 gratka.pl (195.8.99.42) 端口 80
GET / HTTP/1.1
用户代理:Mozilla/5.0(Windows;U;Windows NT 5.1;pl;rv:1.9.1.2)Gecko/20090729 Firefox/3.5.2
主持人:gratka.pl
接受:*/*

* 与主机 gratka.pl 的连接 #0 保持不变
* 向此 URL 发出另一个请求:'http://blad.gratka.pl/403.html'
* 即将 connect() 到 blad.gratka.pl 端口 80
* 正在尝试 195.8.99.1... * 已连接
* 连接到 blad.gratka.pl (195.8.99.1) 端口 80
GET /403.html HTTP/1.1
用户代理:Mozilla/5.0(Windows;U;Windows NT 5.1;pl;rv:1.9.1.2)Gecko/20090729 Firefox/3.5.2
主机:blad.gratka.pl
接受:*/*
...
http://blad.gratka.pl/403.html
* 与主机 blad.gratka.pl 的连接 #1 保持不变
* 最多 (20) 个重定向跟随
* 关闭连接 #0
* 关闭连接 #1

什么意味着我总是用来抓取内容的脚本不起作用:

    $ch = curl_init();
    $timeout = 15;
    $cookie_file_path = 'c.txt';
    $fp = fopen($cookie_file_path, "w");
    fclose($fp);
    $url = 'http://gratka.pl';
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2');
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    $info = curl_exec($ch);
    curl_close($ch);

执行脚本后 cookie 文件 (c.txt) 为空。怎么了?也许网站需要有效的 cookie,或者可能是正确的 HTTP 标头的问题?任何帮助将不胜感激!

编辑:当我在本地主机上执行上述脚本时,它正在工作,但在专用服务器上执行时它不工作。有什么猜测吗?

【问题讨论】:

    标签: php cookies curl


    【解决方案1】:

    我遇到了同样的问题,我在另一台服务器上尝试了我的代码并且它工作正常。我想我的第一台服务器被禁止了。 :)

    我猜 gratka 指向http://blad.gratka.pl/403.html,当他们不想要你的时候。

    【讨论】:

      【解决方案2】:

      您的代码是正确的。只需将此行添加到curl section

      $curl = curl_init();
          curl_setopt($curl, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") );
      
          curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_ENCODING, "gzip");
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      $data = curl_exec($curl);
      curl_close($curl);
      return $data;
      

      【讨论】:

      • 感谢您的回答,但仍然是同样的问题 - 这次看起来像这样: * 即将 connect() 到 gratka.pl 端口 80 * 正在尝试 195.8.99.42... * 已连接 * 已连接到 gratka.pl (195.8.99.42) 端口 80 > GET / HTTP/1.1 Host: gratka.pl Accept: / Accept-Encoding: gzip User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;en-US;rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15
      猜你喜欢
      • 2016-05-28
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 2014-02-18
      • 2010-10-23
      • 2013-08-18
      相关资源
      最近更新 更多