У меня есть функция, которая пытается получить изображения с веб-страницы с помощью 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
Возможно, что HTTP-REFERRER не является одной из их собственных страниц, и поэтому они ограничивают ваш доступ. Я не вижу никакого значения реферера в ваших заголовках.
Тем не менее, у вас есть способ решить эту проблему. Очевидно, у вас есть сайт, который работает, и это не работает. Для сайта, который не работает, вы можете просмотреть URL изображения в вашем браузере? Если нет, то сам URL может быть плохим (не исключайте этого). Если вы можете, тогда сравните заголовки, отправленные и полученные в вашем браузере (через Firebug или другое приложение), и сравните.
Других решений пока нет …