我在 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);
正如我所说,在有重定向的页面上,我会陷入困境。有什么建议么?
我见过一些东西,但没有一个起作用。
curl
有一个选项可以实现您正在寻找的目标,
以下重定向:
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
只需在执行之前将此行添加到您的curl-options 中即可。
正如您所期望的,这将遵循任何 301 / 302 重定向并最终到达一个网站,该网站不会进一步重定向您的请求。
另外,请记住(如果没有解决方法)这可能会导致无限循环。 (站点 a 重定向到 b,b 重定向到 a)。
也就是说,您也应该使用此选项:
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
这样,您的请求将在 10 次重定向后结束,并且您不必担心脚本在无限循环中运行。
相关网站是您进一步使用不同选项进行工作的一个很好的来源php.net http://php.net/manual/en/function.curl-setopt.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)