curl或wget获取无效的jpg图像,但浏览器获取有效图像

时间:2018-05-09 16:52:59

标签: php image curl wget

我像

一样运行命令
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';
    }

如何使用curlwgetfile_get_contents获取此图片?

1 个答案:

答案 0 :(得分:2)

这是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参数,或者在curl_ api中设置CURLOPT_ENCODING=>'gzip',或者通过gzdecode()运行它来自动解压缩它例如$image_data = gzdecode(file_get_contents($image));(gzdecode()方法建议使用 NOT ,因为一旦实际修复服务器,它将停止工作,现在只能运行,因为它们的服务器被窃听了)。您的浏览器不受错误影响的原因是,所有主流浏览器都默认发送Accept-Encoding: gzip(和其他人)。

编辑:最初我提到gzuncompress(),而不是gzdecode(),这是一个错误,正确的解压缩功能是gzdecode()