我在Laravel中有一个应用程序可以擦除网站并检索特定信息。 最近我一直看到越来越多的网站获得403,所以我决定第一次尝试cURL。
我现在唯一的问题是,拥有301或302重定向的网站,cURL并不关注它们。
这就是我所拥有的:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $results['url_search']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$str = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$body = substr($str, $header_size);
curl_close($curl);
正如我所说,在有重定向的网页上,我被卡住了。有什么建议? 我看过一些东西,但没有一个能奏效。
答案 0 :(得分:5)
curl
可以选择实现您的目标,
以下重定向:
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
在执行之前,只需将此行添加到curl-options中即可。
正如您所料,这将遵循任何301/302重定向并最终在网站上进行,不再进一步重定向您的请求。
另外,请记住(没有解决方法)这可能会导致无限循环。 (网站重定向到b,b重定向到a)。
那就是说,你也应该使用这个选项:
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
这样,您的请求将在10次重定向后结束,并且您不必为在无限循环中运行的脚本而烦恼。
使用不同选项进一步开展工作的一个很好的来源是php.net
上的关注网站