2012-06-16 6 views
-1

Использование PHP Я пытаюсь загрузить/сохранить следующее изображение:PHP: почему этот образ не загружается?

http://www.bobshop.nl/catalog/product_image.php?size=detail&id=42428 

При загрузке изображения в браузере, вы можете увидеть его, но когда я пытаюсь загрузить его с помощью нескольких различных методов, я получите файл в 1 КБ, в котором говорится, что продукт не может быть найден на сервере.

Я пробовал это как с помощью file_put_contents, так и с помощью curl. Я даже использовал функцию get_web_page, которую я нашел где-то на StackOverflow, чтобы поймать возможную переадресацию.

Что еще может быть причиной того, что вы можете увидеть изображение в браузере, но не можете его загрузить?

UPDATE: Благодаря ошибки, которая была брошена пробуя различные ответы, я только что узнал истинную причину проблемы. Где-то в процессе соскабливания html URL-адрес получил & вместо &. Я заменяю их сейчас, и теперь каждый другой метод работает тоже ... спасибо всем!

+3

Возможно, есть некоторые проверки заголовков, чтобы убедиться, что запросчик на самом деле является браузером. Почему бы не попробовать просить изображение с Google Chrome и открыть инспектора? Перейдите на вкладку сети. Обновите страницу. Скопируйте отправленные заголовки и используйте их с cURL. –

+0

Я полагаю, что у них есть защита от загрузки, возможно, путем проверки строки User Agent –

+1

Вы даже можете сделать еще один шаг и поиграть с заголовками и посмотреть, какая комбинация возвращает изображение и который возвращает сообщение об ошибке. –

ответ

0

Я просто реализовал простой способ загрузки и сохранения, и она работала:

<?php 

$fileContent = implode("",file("http://www.bobshop.nl/catalog/product_image.php?size=detail&id=42428")); 
$fp = fopen("/tmp/image","w+"); 

fwrite($fp, $fileContent); 

fclose($fp); 

?> 

Вы за прокси? Это может быть проблемой (вы с настроенным прокси, но php не);)

+0

Я принимаю это как ответ, так как попробовав свой код, я обратился к реальной причине: & вместо & в URL! – Dylan

0

Вероятно, существует какая-то проверка заголовков, выполняемая с помощью этого скрипта PHP, чтобы гарантировать, что браузер запрашивает изображение, а не кто-то пытается чтобы очистить их содержимое. Это можно подделать (хотя после выполнения чего-то подобного мне кажется, что мне нужно принять душ) с помощью cURL. В частности, curl_setopt():

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-agent: Some legitimate string' 
)); 

Чтобы узнать, какие должны быть отправлены заголовки, вам нужно сделать некоторые эксперименты. Если у вас есть Google Chrome, вы, вероятно, использовали Инспектор (если у Firefox нет похожих аддонов, вы можете использовать что-то вроде Firebug). Если вы запрашиваете изображение с помощью Chrome, вы можете щелкнуть его правой кнопкой мыши, чтобы проверить его. Перейдите на вкладку «Сеть». Обновите страницу. Должен появиться запрос на product_image.php. Если вы нажмете на нее и перейдите на вкладку «Заголовки», вы увидите список отправленных заголовков. Мои браузеры отправляет: User-Agent, Accept, Accept-Encoding, Accept-Language, и Accept-Charset.

enter image description here

комбинации Try этих заголовков с действительными значениями, чтобы увидеть, какие должны быть отправлены на изображение, чтобы быть возвращены те. Я бы сказал, что этот сайт, вероятно, проверяет только User-agent, так что начните с этого.


Важное примечание: Вы должны кэшировать результат этого вызова, потому что это будет очень подозрительно, если ваш сервер запрашивает изображение несколько раз в быстрой последовательности (скажем, если многие пользователи по вашему запросу сайта скрипт, который захватывает это изображение). Также как дополнительный слой анонимности, вы можете выбрать свой User-agent из массива действительных, поэтому bobshop.nl считает, что все запросы поступают от пользователей за большой сетью (например, в кампусе колледжа). Вы можете найти правильные строки агента пользователя на UserAgentString.com.

+0

Большое спасибо за ваши усилия. Проблема не была сложной, см. UPDATE. – Dylan

Смежные вопросы