从cURL下载的图片打不开,但可以直接从url打开

从cURL下载的图片打不开,但可以直接从url打开

这是我下载文件的curl 命令。下载的文件已损坏,无法打开。文件网址是https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg

curl -iv --output abc.jpg --request GET \
  --url https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg

我什至尝试使用 Chrome 的完整卷曲副本,但它不起作用

curl 'https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg' --output "abc.jpg" \
  -H 'authority: www.carscoops.com' \
  -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
  -H 'accept-language: en-US,en;q=0.9' \
  -H 'cache-control: no-cache' \
  -H 'pragma: no-cache' \
  -H 'sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: document' \
  -H 'sec-fetch-mode: navigate' \
  -H 'sec-fetch-site: none' \
  -H 'sec-fetch-user: ?1' \
  -H 'upgrade-insecure-requests: 1' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'

它也不起作用wget,但仍然可以通过浏览器访问,什么样的技术可以阻止它下载?

答案1

图像正在被 Brotli 编码(请参阅Content-Encoding: br响应标头),但您的curl 版本很可能不支持 brotli,因此它只是默默地忽略解码。您可以通过添加该选项来确定您的curl版本是否支持返回的编码--compressed。如果设置的curl 不理解内容编码将会失败。示例(在 Debian Buster 上测试):

$ curl --compressed "https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg" > abc.jpg
curl: (61) Unrecognized content encoding type. libcurl understands deflate, gzip content encodings.

尝试升级您的curl版本。较新的版本应该支持 br。

或者有一个布罗特利命令行工具,您可以通过管道输出来“解压缩”(非常确定,对于已经压缩的 JPEG 图像,编码是微不足道的,因此您实际上可以只删除几个字节来“解压缩”图像,但最好使用正确的工作工具..):

$ curl "https://www.carscoops.com/wp-content/uploads/2022/12/Buick-Encore-GX-Scoop-4.jpg" \
| brotli -d > abc.jpg

相关内容