我们有一个用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;
}
编辑包含下面的建议,尽管问题仍然存在。
答案 0 :(得分:1)
如果您还没有,则需要使用 gzdecode()
手动充气该功能的响应更好的方法可能是告诉Curl处理压缩本身,而不是手动指定它。尝试删除Accept-Encoding标题行并添加:
curl_setopt($ch, CURLOPT_ENCODING, '');