PHP cURL请求不遵循重定向

时间:2016-05-04 15:18:30

标签: php redirect curl web-crawler

我们有一个用PHP构建的抓取工具,可以从客户的页面中提取重要信息。问题是我们的大多数客户都发布使用302进入最终目的地的自定义缩短链接。我们的爬虫已经成功地遵循这些(请参阅下面的代码)直到这个最新的客户端。这是一个示例链接:

http://www.dose.com/lists/26235/s

如果您在浏览器中访问,您将看到标准的302行为,但如果您使用爬虫访问它,它只返回200并且不会重定向。这让我相信我必须让请求看起来尽可能“自然”,但我仍然没有取得任何成功。最后,这是我们代码的cURL部分:

function sendRequest($url)
{
    global $ch;
    $user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)".
                " Gecko/20041107 Firefox/1.0";
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language: en-US,en;q=0.8',
        'Connection: keep-alive'
    ));
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent );
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_ENCODING, '');

    $contents = curl_exec($ch);
    //curl_close($ch);

    return $contents;
}

编辑包含下面的建议,尽管问题仍然存在。

1 个答案:

答案 0 :(得分:1)

如果您还没有,则需要使用 gzdecode()

手动充气该功能的响应

更好的方法可能是告诉Curl处理压缩本身,而不是手动指定它。尝试删除Accept-Encoding标题行并添加:

curl_setopt($ch, CURLOPT_ENCODING, '');