我编写了一个bash脚本,它使用curl从网站获取输出,并在html输出上执行一堆字符串操作。问题是当我针对返回其输出gzip的网站运行它时。在浏览器中访问该网站工作正常。
当我手动运行curl时,我得到了gzipped输出:
$ curl "http://example.com"
以下是该特定网站的标题:
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
我知道返回的数据是gzip压缩的,因为这会按预期返回html:
$ curl "http://example.com" | gunzip
我不想通过gunzip管道输出,因为脚本在其他站点上按原样运行,并且通过gzip管道会破坏该功能。
一切都空了
有什么想法吗?
答案 0 :(得分:220)
curl
标志, --compressed
将自动解压缩响应:
curl --compressed "http://example.com"
很可能支持gzip,但您可以通过在“功能”行中的某处运行<强> - 压缩强> (HTTP)使用libcurl支持的算法之一请求压缩响应,并保存未压缩文档。如果使用此选项并且服务器发送不受支持的编码,则curl将报告错误。
curl -V
并查找 libz 来检查这一点:
$ curl -V
...
Protocols: ...
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
请注意,这里的网站确实存在问题。如果curl
未传递Accept-Encoding: gzip
请求标头,则服务器不应发送压缩响应。