【问题标题】:Http get ungzip response in bashHttp 在 bash 中获取 ungzip 响应
【发布时间】:2012-05-24 04:31:09
【问题描述】:

我需要手动解压缩以下页面的响应: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

【问题讨论】:

  • 返回的数据是什么样的?它有Transfer-Encoding: chunked 标头吗?
  • 在帖子中添加了标题。在他们之后,它只是一个压缩的数据块。
  • 适合我吗? [tmp]$ 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 [tmp]$ cat response.txt | sed '1,14d' | zcat > response.html gzip: stdin: 文件意外结束 [tmp]$ head -n 2 response.html ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow" target="_blank">w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • [tmp]$ zcat --version zcat (gzip) 1.4 版权所有 (C) 2007, 2009-2010 Free Software Foundation, Inc. 这是免费软件。您可以根据 GNU 通用公共许可证 gnu.org/licenses/gpl.html> 的条款重新分发它的副本。在法律允许的范围内,不提供任何保证。由 Paul Eggert 撰写。

标签: bash unix gzip deflate zcat


【解决方案1】:

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

【讨论】:

  • 您是否尝试过手动取出这些线条时是否有效?看看file 是怎么说的。 IIRC,前两个字节应该是'GZ',是你看到的吗?
  • 但是浏览器如何处理原始放气?有什么我可以用它做的吗?
  • @spacevillain :如果您的系统有它,请在标记为 deflate 时尝试在您的数据上使用 uncompress。祝你好运。
【解决方案2】:

请参阅here 的回答,了解关于“deflate”作为 HTTP 内容编码的含义的混淆。

最好简单地not accept deflate 并且只接受 gzip。然后服务器不会提供 deflate。

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2022-06-28
      • 2012-11-07
      • 2015-11-20
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多