cURL被重定向?

时间:2014-09-09 12:39:37

标签: php html curl

我正在编写一个php脚本,最终将从cURL检索到的html中删除图像。我注意到在某些网站上,我的目标网址不是返回的内容。我的脚本被重定向到该网站页面的特定部分。

例如,如果我正在尝试检索此页面上的html: Link

我从这个页面返回了html: Link

这是我的cURL代码:

           function curl($url){
                $headers[]  = "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
                    rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
                $headers[]  = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,
                    */*;q=0.8";
                $headers[]  = "Accept-Language:en-us,en;q=0.5";
                $headers[]  = "Accept-Encoding:gzip,deflate";
                $headers[]  = "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7";
                $headers[]  = "Keep-Alive:115";
                $headers[]  = "Connection:keep-alive";
                $headers[]  = "Cache-Control:max-age=0";

                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($curl, CURLOPT_ENCODING, "gzip");
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

                $data = curl_exec( $curl );
                $header = curl_getinfo( $curl );

                curl_close($curl);

                return $header; 
            }

            $data = curl($_GET['url']);

            echo print_r($data);

有没有办法更多地欺骗脚本,以免被重定向?

@mariobgr 在这里,我试图在有图像的地方显示快速响应。如果我关闭关闭位置,我什么都不回来

                ...

                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($curl, CURLOPT_ENCODING, "gzip");
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);

                $data = curl_exec( $curl );
                //$header = curl_getinfo( $curl );

                curl_close($curl);

                return $data;   
            }

            $data = curl($_GET['url']);

            $dom = new DOMDocument();
            @$dom->loadHTML($data);

            $images = $dom->getElementsByTagName('img');

            foreach($images as $image) {

                echo "image here";
            }

1 个答案:

答案 0 :(得分:0)

http://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html

设置为1的参数告诉库遵循服务器在3xx响应中作为HTTP标头的一部分发送的任何Location:标头。 这意味着libcurl将在新位置重新发送相同的请求,并一直关注新的Location:标头,直到不再返回此类标头。 CURLOPT_MAXREDIRS可用于限制libcurl将遵循的重定向数量。

您可以将其设置为FALSE / 0以防止重定向