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

我写了一个bash脚本,它使用curl从网站获取输出,并在html输出上执行一些string操作。 问题是,当我运行它的网站,正在返回其输出gzipped。 在浏览器中的网站工作正常。

当我手动curl时,我得到gzip的输出:

$ 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 

我不想通过gunzippipe道输出,因为脚本在其他站点上工作,并通过gzippipe道将打破function。

我试过了

  1. 更改用户代理(我尝试了相同的string,我的浏览器发送“Mozilla / 4.0”等)
  2. 人curl
  3. 谷歌search
  4. searchstackoverflow

一切都空了

有任何想法吗?

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

 curl --compressed "http://example.com" 

– 压缩 (HTTP)使用libcurl支持的algorithm之一请求压缩的响应,并保存未压缩的文档。 如果使用此选项并且服务器发送不受支持的编码,curl将报告错误。

gzip是最有可能的支持,但你可以通过运行curl -V并在“Features”行中的某个地方查找libz来检查:

 $ curl -V ... Protocols: ... Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 

请注意,这是真正的问题网站,在这里是错误的。 如果curl未通过Accept-Encoding: gzip请求头,则服务器不应该发送压缩的响应。