curl или wget получает недопустимое изображение jpg, но браузер получает верное изображение - PullRequest
0 голосов
/ 09 мая 2018

Я запускаю команду как

wget https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg

Я пытаюсь получить изображение выше, используя curl, возвращенное изображение является недействительным jpg-изображением. Когда я пытаюсь с браузером и сохранить изображение как, я получаю действительное изображение JPG. Даже когда я пытаюсь с file_get_contents, он возвращает false.

    $image = 'https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg'
    $image_data = file_get_contents($image);
    try {
        echo 'saving';
        $image1 = imagecreatefromjpeg($image_data);

    } catch (Exception $ex) {
        echo 'error';
    }

Как получить это изображение с curl, wget или file_get_contents?

1 Ответ

0 голосов
/ 09 мая 2018

это ошибка сервера odis.homeaway.com, вы должны отправить их вебмастеру отчет об ошибке.

их сервер ВСЕГДА отправляет изображение в формате https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg gzip, даже если клиент НЕ указал accept-encoding: gzip. wget вообще не поддерживает сжатие gzip, но curl поддерживает. пока они не исправят свой сервер, вы можете указать curl распаковать его для вас автоматически, установив аргумент --compressed в версии командной строки или установив CURLOPT_ENCODING=>'gzip' в curl_ api, или запустив его через gzdecode (), например, $image_data = gzdecode(file_get_contents($image)); (метод gzdecode () рекомендуется НЕ , потому что он перестанет работать, как только они действительно исправят свой сервер, и работает только сейчас, потому что их сервер прослушен). причина, по которой ваш браузер не подвержен данной ошибке, заключается в том, что все основные браузеры всегда отправляют Accept-Encoding: gzip (и другие) по умолчанию.

edit: изначально я упоминал gzuncompress(), а не gzdecode(), это была ошибка, правильная функция декомпрессии - gzdecode().

...