1

我需要手动解压缩以下页面的响应:http: //muaban.net/ho-chi-minh.html

我正在做

echo -e "GET /ho-chi-minh.html HTTP/1.1\r\nHost: muaban.net\r\nAccept-Encoding: gzip\r\n" | nc muaban.net 80 > response.txt

直到响应实际包含Content-Encoding: gzipContent-Encoding: deflate标题(有时它只是纯文本),然后

cat response.txt | sed '1,14d' | zcat

但它说输入不是 gzip 格式。

以下是标题:

HTTP/1.1 200 OK
Cache-Control: public, max-age=67
Content-Type: text/html
Content-Encoding: deflate
Expires: Wed, 16 May 2012 15:20:31 GMT
Last-Modified: Wed, 16 May 2012 15:18:31 GMT
Vary: *
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
X-Proxy: 162
Date: Wed, 16 May 2012 15:19:23 GMT
Content-Length: 12618
4

3 回答 3

1

有关“deflate”作为 HTTP 内容编码的含义的混淆,请参阅此处的答案。

最好干脆不接受deflate,只接受gzip。然后服务器将不会提供放气。

如果您接受 deflate,那么您必须准备尝试将其解码为 zlib 流(这是 HTTP 标准指定的内容)或原始 deflate 流(这是 Microsoft 服务器显然会错误地提供的内容)。然后使用正确解码的那个。

zlib 和 raw deflate 格式都不是 gzip,因此 zcat 也不能​​工作。

于 2012-05-16T19:44:38.600 回答
1

另一个问题的答案表明 IIS 使用了错误的紧缩格式。但似乎有问题的网站随机返回deflateor (the correct) gzip,这就是为什么 David Souther 能够做到zcat这一点(我在几次尝试中得到了 gzip 一次)。所以你可能想要循环并获取它,直到你得到一个 gzip 版本(可能应该包括延迟和/或最大尝试)。

于 2012-05-16T15:55:13.810 回答
0

您可以将编码设置为“身份”,该站点将纯文本返回给您。

于 2012-05-17T07:20:19.833 回答