我正在编写一个php脚本,该脚本最终将从cURL检索的html中抓取图像。我注意到在一些网站上,我的目标网址并不是返回的。我的脚本被重定向到该网站页面的特定部分。
例如,如果我试图检索此页面上的html:链接
我得到了从这个页面返回的html:链接
这是我的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);
有没有什么方法可以更多地欺骗脚本,这样它就不会被重定向?
@马里奥布格在这里,我试图在有图像的地方显示快速响应。如果我关闭跟踪位置,我不会得到任何
...
$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";
}
http://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html
设置为1的参数告诉库跟随服务器在3xx响应中作为HTTP头的一部分发送的任何Location:头。这意味着libcurl将在新位置重新发送相同的请求,并一直遵循新的location:headers,直到不再返回这样的头。CURLOPT_MAXREDIRS可用于限制libcurl将遵循的重定向数量
您可以将其设置为FALSE/0以防止重定向