首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在使用curl时正确处理gzipped页面?

如何在使用curl时正确处理gzipped页面?
EN

Stack Overflow用户
提问于 2011-12-03 09:05:49
回答 2查看 105.1K关注 0票数 158

我编写了一个bash脚本,它使用curl从网站获取输出,并对html输出执行一系列字符串操作。问题是,当我在一个返回gzipped输出的站点上运行它时。在浏览器中访问站点效果很好。

当我手动运行curl时,我得到了gzipped格式的输出:

代码语言:javascript
复制
$ curl "http://example.com"

下面是来自该特定站点的标题:

代码语言:javascript
复制
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8
X-Powered-By: PHP/5.2.17
Last-Modified: Sat, 03 Dec 2011 00:07:57 GMT
ETag: "6c38e1154f32dbd9ba211db8ad189b27"
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: must-revalidate
Content-Encoding: gzip
Content-Length: 7796
Date: Sat, 03 Dec 2011 00:46:22 GMT
X-Varnish: 1509870407 1509810501
Age: 504
Via: 1.1 varnish
Connection: keep-alive
X-Cache-Svr: p2137050.pubip.peer1.net
X-Cache: HIT
X-Cache-Hits: 425

我知道返回的数据是this格式的,因为这会像预期的那样返回html:

代码语言:javascript
复制
$ curl "http://example.com" | gunzip

我不想通过gunzip来传输输出,因为脚本在其他站点上可以正常工作,而通过gzip来传输会破坏这个功能。

我尝试过的

  1. 更改用户代理(我尝试了浏览器发送的相同字符串,"Mozilla/4.0“等)
  2. man agent

所有东西都是空的

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-03 10:47:58

如果您设置了--compressed标志,curl将自动解压缩响应:

代码语言:javascript
复制
curl --compressed "http://example.com"

libcurl --压缩超文本传输协议()使用libcurl支持的算法之一请求压缩响应,并保存未压缩的文档。如果使用此选项,并且服务器发送了不支持的编码,curl将报告错误。

gzip很可能是受支持的,但是你可以通过运行curl -V并在“”行的某处查找gzip libz来检查:

代码语言:javascript
复制
$ curl -V
...
Protocols: ...
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 

请注意,这里真正有问题的网站才是问题所在。如果curl未传递Accept-Encoding: gzip请求报头,则服务器不应发送压缩响应。

票数 296
EN

Stack Overflow用户

发布于 2021-12-09 10:58:36

在相关的错误报告 Raw compressed output when not using --compressed but server returns gzip data #2836中,开发人员说:

服务器不应该发送content-encoding: gzip,除非客户端已经通知它是可以接受的。此外,当您不使用--压缩与curl,您告诉命令行工具,您宁愿存储确切的流(压缩或未压缩)。我没看到卷发虫..。

因此,如果服务器可以发送压缩后的内容,可以使用--compressed让curl自动解压缩。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8364640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档