Gzip
如何解壓縮 gzip 後的 HTTP 響應?
文件
req
包含請求標頭:GET /cd/E11882_01/server.112/e41084/toc.htm HTTP/1.1^M Host: docs.oracle.com^M Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8^M Accept-Language: en-US,en;q=0.5^M Accept-Encoding: gzip, deflate^M Connection: keep-alive^M ^M
我跑:
cat req | nc docs.oracle.com 80 > resp
resp
包含:HTTP/1.1 200 OK^M Server: Apache^M ETag: "726bf43b293f9fc8eac0f8f6b7be3a84:1457459134"^M Last-Modified: Fri, 04 Mar 2016 14:26:34 GMT^M Accept-Ranges: bytes^M Content-Type: text/html^M Vary: Accept-Encoding^M Content-Encoding: gzip^M Date: Sat, 18 Jun 2016 07:04:06 GMT^M Content-Length: 13163^M Connection: keep-alive^M ^M ^_<8b>^H^@^@^@^@^@^@^@Å}ysã8<92>ïÿó)¸Þ<88>}3ïµËâMÎvy<83>â%ªuµ(Õ1^[^[ Z¢mvÉ<92>[Gu¹?ýf<82>^D^Hɦ Òîx^[³]¶¬ü^AH$^R<99><89>Dâç^?óÆîìëÄ<97>î^O^Oëë¿ý<8c>ÿHëds÷ñ"Ý\à^Gi²<82>^?^^ÒC^Bß9<^¦¿^_³ï^_/¾\Î<9d>Kwûð<98>^\²<9b>uz!-·<9b>Cº9|¼<88>ü<8f>éê.½ T<9b>ä!ýxñ=KÿxÜî^NÜ^WÿÈV<87>û<8f>«ô{¶L/É/?IÙ&;dÉúr¿LÖéGùCç'é!ù<91>=^\^_èG^Lwy<9f>ìö)à^\^O·<97>^V~|È^NëôÚK^NÉM²O¥ø×<81>4<80>¡^\<93>»T<9a>¦·é.Ý,SéRró^^ì^?¾Ê)N:z<97>nÒ]rØî¸<9e><8e>wÉr<9d>J<9e>3íJ_z³á^@!¾§»Cº<93>þ>Ü®R飴Ú.<8f>^Oðí^?@^CÃtw<97>®¤Oén<9f>m7<92>Ü1õ^Kéê´<9d>Õ^R¨^_ö^_<96>»49¤+®5¥#^[<97>^]ù²£Ïô^?jÆ?^Uë_ϨwÛ<9b>íaÏ^Q%ëue^Sd<94>Üwk8T<89><93><80><»ÍR<9e>7¾&w,í²£U<93>í^KF<8c>o9:h{^Zä4ëlóMÚ¥køð<90> <88>ÜïÒÛ<8f>^W^_>\Áÿ²Í*ýñ^AäòB"ãøxÑÛ>@^_^OO<8f>ðó!ýq¸B¡=Gr·<8f>O»ìîþ^LmµÜ><l7<84>äj _9Aæ<88>^<82>ÿÛÏûå.{<^T^?L^^^_×Ù^Rä^_ð~K¾'ù^_/$i¿[<9e>·÷Ûþ ...continues...
現在,顯然響應正文是 gzip 格式。為了解壓它,我已將響應正文複製到
resp-body
. 所以,resp-body
包含:^_<8b>^H^@^@^@^@^@^@^@Å}ysã8<92>ïÿó)¸Þ<88>}3ïµËâMÎvy<83>â%ªuµ(Õ1^[^[ Z¢mvÉ<92>[Gu¹?ýf<82>^D^Hɦ Òîx^[³]¶¬ü^AH$^R<99><89>Dâç^?óÆîìëÄ<97>î^O^Oëë¿ý<8c>ÿHëds÷ñ"Ý\à^Gi²<82>^?^^ÒC^Bß9<^¦¿^_³ï^_/¾\Î<9d>Kwûð<98>^\²<9b>uz!-·<9b>Cº9|¼<88>ü<8f>éê.½ T<9b>ä!ýxñ=KÿxÜî^NÜ^WÿÈV<87>û<8f>«ô{¶L/É/?IÙ&;dÉúr¿LÖéGùCç'é!ù<91>=^\^_èG^Lwy<9f>ìö)à^\^O·<97>^V~|È^NëôÚK^NÉM²O¥ø×<81>4<80>¡^\<93>»T<9a>¦·é.Ý,SéRró^^ì^?¾Ê)N:z<97>nÒ]rØî¸<9e><8e>wÉr<9d>J<9e>3íJ_z³á^@!¾§»Cº<93>þ>Ü®R飴Ú.<8f>^Oðí^?@^CÃtw<97>®¤Oén<9f>m7<92>Ü1õ^Kéê´<9d>Õ^R¨^_ö^_<96>»49¤+®5¥#^[<97>^]ù²£Ïô^?jÆ?^Uë_ϨwÛ<9b>íaÏ^Q%ëue^Sd<94>Üwk8T<89><93><80><»ÍR<9e>7¾&w,í²£U<93>í^KF<8c>o9:h{^Zä4ëlóMÚ¥køð<90> <88>ÜïÒÛ<8f>^W^_>\Áÿ²Í*ýñ^AäòB"ãøxÑÛ>@^_^OO<8f>ðó!ýq¸B¡=Gr·<8f>O»ìîþ^LmµÜ><l7<84>äj _9Aæ<88>^<82>ÿÛÏûå.{<^T^?L^^^_×Ù^Rä^_ð~K¾'ù^_/$i¿[<9e>·÷Ûþ ...continues...
然後我嘗試
gzip -d resp-body
了但它不起作用。我應該怎麼做才能解壓響應?
刪除標題,您將剩下的是
gzip
可以使用gzip -d
或解壓縮的壓縮數據zcat
。例如sed -e '1,/^[[:space:]]*$/d' resp | gzip -d > resp.decompressed
該
sed
腳本刪除標題 - 即從第一行到第一個空行 (/^[[:space:]]*$/
) 的所有內容。
[[:space:]]
字元類將使腳本匹配空行和僅包含空格字元的sed
行(包括輸入符,^M
)順便說一句,稍微聰明一點的版本會提取
Content-Encoding:
和Content-Type:
標頭,並從中使用 mime-type 來決定是否使用cat
,lynx -dump
,gzip -d
,bzip2 -d
或xz -d
其他任何東西來“解碼”數據。但這可能需要將其寫入perl
.