【问题标题】:curl or wget gets invalid jpg image but browser gets valid imagecurl 或 wget 获取无效的 jpg 图像,但浏览器获取有效图像
【发布时间】:2018-05-09 16:52:58
【问题描述】:

我像这样运行命令

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 获取此图像?

【问题讨论】:

标签: php image curl wget


【解决方案1】:

这是odis.homeaway.com 服务器的错误,您应该向他们的网站管理员发送错误报告。

他们的服务器总是以https://odis.homeaway.com/odis/listing/5895882c-6c65-47f5-b782-e13b8246e4aa.c10.jpg gzip 压缩格式发送图像,即使客户端没有指定accept-encoding: gzip。 wget 根本不支持 gzip 压缩,但 curl 支持。在他们修复服务器之前,您可以通过在命令行版本中设置--compressed 参数,或在curl_ api 中设置CURLOPT_ENCODING=>'gzip',或通过gzdecode() 运行它,例如@987654326,告诉curl 自动为您解压缩它@(不推荐使用 gzdecode() 方法,因为一旦他们真正修复了他们的服务器,这将停止工作,并且现在只能工作,因为他们的服务器被窃听了)。您的浏览器不受该错误影响的原因是所有主流浏览器默认始终发送Accept-Encoding: gzip(和其他)。

编辑:原来我提到gzuncompress(),不是gzdecode(),那是个错误,正确的解压函数是gzdecode()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2021-06-10
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    相关资源
    最近更新 更多