获取cURL以遵循重定向

Avi*_*Avi 3 php curl http-redirect

我在Laravel中有一个应用程序可以擦除网站并检索特定信息.最近我看到越来越多的网站获得403 forbiidden所以我决定第一次尝试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); 
Run Code Online (Sandbox Code Playgroud)

正如我所说,在有重定向的页面上,我被卡住了.有什么建议?我见过一些东西,但都没有.

Das*_*ffe 6

curl 可以选择在重定向后实现您正在寻找的内容:

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
Run Code Online (Sandbox Code Playgroud)

在执行之前,只需将此行添加到curl-options中.

正如您所料,这将遵循任何301/302重定向并最终在网站上,而不会进一步重定向您的请求.

此外,请记住(没有解决方法)这可能会导致无限循环.(网站重定向到b,b重定向到a).

也就是说,您也应该使用此选项:

curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
Run Code Online (Sandbox Code Playgroud)

这样,您的请求将在10次重定向后结束,并且您无需担心脚本在无限循环中运行.

使用不同选项进一步工作的一个很好的来源是php.net上的关于网站