Декодирование HTTP-тела «на лету» в Linux?

Декодирование HTTP-тела «на лету» в Linux?

Я хочу контролировать HTTP-обмены между моим сервером и браузером. В настоящее время я использую localhost, потому что я разрабатываю приложение. Я установил и использовал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>

Что я хотел бы видетьответскорее:

...
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-Encodingи Content-Encoding: gzipявляются источником моей проблемы. Есть ли способ избавиться от этого скремблирования и увидетьHTMLкод в чистом виде? Я имею в виду довольно простой способ? На самом деле, у меня не будет никакого контроля над браузером, который запрашивает с помощью Accept-Encoding: gzip,deflate,sdch.Но если в целях отладки единственный способ — настроить браузер так, чтобы он не запрашивал кодирование/сжатие, то я могу с этим смириться.

Спасибо за вашу помощь!

решение1

Содержимое, закодированное с помощью, Content-Encoding: gzipможно легко распаковать, передав его через gzip -d. Для deflate я не знаю утилиты, но это можно сделать с помощью программирования zlib. С SDCH не так просто, потому что для его распаковки вам понадобится доступ к словарю, используемому для сжатия, который может находиться где-то еще в вашем захвате пакетов или вообще нигде.

Gzip и, вероятно, deflate также должны быть прозрачно обработаны wireshark, так что вы можете видеть там декодированные заголовки. Инструмент httpflow, поставляемый сСеть::ОсмотретьПакет perl также может декодировать для вас полезную нагрузку gzip и deflate, а также может использоваться для извлечения пар HTTP-запросов/ответов из файла pcap и сохранения каждой из этих пар как одного файла pcap с уже декодированной полезной нагрузкой.

Связанный контент