我在这里有一个功能,试图使用cURL从网页抓取图像。它适用于大多数网站,但也有一些重定向脚本的方式。在我的代码中用作示例的网站会将脚本重定向到其网页上的特定页面。如果我禁用重定向或使用CURLOPT_MAXREDIRS限制它,我没有返回任何内容......我在这里做错了什么?
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);
curl_setopt($curl, CURLOPT_COOKIESESSION, true );
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt' );
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt' );
//curl_setopt($curl, CURLOPT_MAXREDIRS, 1);
$data = curl_exec( $curl );
//$header = curl_getinfo( $curl );
curl_close($curl);
return $data;
}
$data = curl( "http://www.missselfridge.com/en/msuk/product/dress-shop-299048/view-all-299126/dark-floral-panel-midi-dress-3273361" );
$images = array();
preg_match_all('~<img.*?src=["\']+(.*?)["\']+~', $data, $images);
...
//then for each image in images, is displayed in html.
我的浏览器标题@Samuel Fullman
响应标头
CACHED_RESPONSE true
Cache-Control max-age=0, no-cache, no-store
Connection keep-alive
Content-Encoding gzip
Content-Language en-US
Content-Length 17121
Content-Type text/html; charset=UTF-8
Date Tue, 16 Sep 2014 16:27:42 GMT
Expires Tue, 16 Sep 2014 16:27:42 GMT
Pragma no-cache
Vary Accept-Encoding
请求标题
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control max-age=0
Connection keep-alive
Cookie ...
Host www.missselfridge.com
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
答案 0 :(得分:0)
HTTP-REFERRER可能不是他们自己的页面之一,因此限制了您的访问。我的标题中没有显示任何引荐来源值。
那就是说,你确实有办法解决这个问题。显然,你有一个有效的网站,并且不起作用。对于不起作用的网站,您可以在浏览器中查看图片网址吗?如果没有,那么URL本身可能是坏的(不要排除它)。如果可以,请比较浏览器中发送和接收的标头(通过Firebug或其他应用程序)并进行比较。