我正在编写一个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";
}
答案 0 :(得分:0)
http://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html
设置为1的参数告诉库遵循服务器在3xx响应中作为HTTP标头的一部分发送的任何Location:标头。 这意味着libcurl将在新位置重新发送相同的请求,并一直关注新的Location:标头,直到不再返回此类标头。 CURLOPT_MAXREDIRS可用于限制libcurl将遵循的重定向数量。
您可以将其设置为FALSE / 0以防止重定向