我像
一样运行命令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
获取此图片?
答案 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()
。