我在laravel中有一个应用程序,它可以抓取站点并检索特定信息。
最近我看到越来越多的网站获得403比登,所以我决定尝试卷曲第一次。
我现在唯一的问题是,那些有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);
所以正如我所说,在有重定向的页面上,我会被卡住。有什么建议吗?
我见过一些东西,但都不管用。
最佳答案
curl
有一个选项可以实现您所要的目标,
以下重定向:
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
在执行之前,只需将这一行添加到curl选项中。
如您所料,这将遵循任何301/302重定向,并最终在一个网站上,这不会重定向您的请求任何进一步。
另外,记住(没有解决方法)这可能会导致无限循环。(站点A重定向到B,B重定向到A)。
也就是说,你也应该使用这个选项:
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
这样,您的请求将在10次重定向后结束,您不必费心让脚本在无休止的循环中运行。
一个很好的来源为您的进一步工作与不同的选择是有关的网站php.net