web-dev-qa-db-ja.com

LinuxでHTTPボディをオンザフライでデコードしますか?

私の願いは、サーバーとブラウザー間のHTTP交換を監視することです。現在、アプリを開発しているのでローカルホストを使用しています。 tcpflowをインストールして使用しましたが、非常に便利でしたが、応答の本文は暗号化されています(httpsはありません。ヘッダーを参照すると、gzipで圧縮されていると思います)。 tcpflow -i lo -c -eからの交換は次のとおりです。

127.000.000.001.59549-127.000.000.001.00080: GET /dom/test.html HTTP/1.1
Host: localhost
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36
Referer: http://localhost/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4


127.000.000.001.00080-127.000.000.001.59549: HTTP/1.1 200 OK
Date: Mon, 05 Oct 2015 03:44:53 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Mon, 05 Oct 2015 03:06:42 GMT
ETag: "36031e-8e-52152cd86200d"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 118
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: text/html

...........Qt.w....qU.(......Q..)v\

6..%.
...E..%.J.%i..J.`.....T;....|......E.}....>D.MR~J%Xq.!.J..P.D....
.r..0....

そしてここに[〜#〜] html [〜#〜]コードがあります:

<!DOCSTYLE html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Hello World!</title>
</head>
<body>
  <h1>Hello World!</h1>
</body>
</html>

responseとして見たいのはむしろ:

...
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 118
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: text/html

<!DOCSTYLE html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Hello World!</title>
</head>
<body>
  <h1>Hello World!</h1>
</body>
</html>

ヘッダーエントリVary: Accept-EncodingContent-Encoding: gzipが私の問題の原因だと思います。このスクランブルを取り除き、[〜#〜] html [〜#〜]コードを明確に表示する方法はありますか?私はかなり簡単な方法を意味しますか?実際、私はAccept-Encoding: gzip,deflate,sdchでリクエストするブラウザを制御できません。 ただし、デバッグの目的で、エンコード/圧縮を要求しないようにブラウザーを設定することが唯一の方法である場合は、それを使用できます。

ご協力いただきありがとうございます!

2
dom_beau

Content-Encoding: gzipでエンコードされたコンテンツは、コンテンツをgzip -dにパイプすることで簡単に解凍できます。 deflateの場合、ユーティリティはわかりませんが、zlibプログラミングで実行できます。 SDCHを解凍するには、圧縮に使用される辞書にアクセスする必要があるため、SDCHはそれほど簡単ではありません。辞書は、パケットキャプチャのどこかにあるか、どこにもない可能性があります。

デコードされたヘッダーを確認できるように、Gzipとおそらくdeflateもwiresharkで透過的に処理する必要があります。 Net :: Inspect Perlパッケージに付属のhttpflowツールは、gzipをデコードしてペイロードをデフレートすることもでき、pcapファイルからHTTPリクエスト/レスポンスのペアを抽出してそれぞれを保存するためにも使用できます。これらのペアは、ペイロードがすでにデコードされている単一のpcapファイルです。

2
Steffen Ullrich