Распакуйте GZipped ответ от сервера (Socket) - PullRequest
1 голос
/ 12 апреля 2010

Умм, хорошо, после отправки некоторых данных на сервер, отметив эту конкретную часть:

"Accept-Encoding: gzip,deflate\r\n"

Я получаю следующий ответ:

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 09 Apr 2010 23:25:27 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.8
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Fri, 09 Apr 2010 23:25:27 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding

7aa
??U-?Rh?%?2?w??PM]??7?qZ?K?)???2?&??m???"q??/p9w?????x?[`tA!G???G?5z??????a>k????????Q
???N??
('??f?,(??Y:5B???-?)?3x^0e:j?`,???**???F>G)?2????@???b??????A?k???Ar?n?

Но как мне его распаковать? Обратите внимание, что я использую класс Socket для выполнения всей работы.

Я знаю, как распаковать его, но проблема здесь заключается в том, что я не могу отделить Пакет от данных GZipped, psuedo-psuedocode (или чего-либо еще), как я это делаю:

Socket sends packet;
Socket reads response from server, stores into a ByteArray;
Create MemoryStream, use ByteArray;
Create GZipStream, use Memorystream;

теперь проблема возникает; Я получаю следующую ошибку:

System.IO.InvalidDataException Магическое число в заголовке GZip не правильный. Убедитесь, что вы проходите в поток GZip.

Надеюсь, объяснение достаточно ясное> __>.

1 Ответ

0 голосов
/ 12 апреля 2010

Содержимое, которое вам нужно gzip, начинается после двойной новой строки и продолжается (если присутствует) байтов Content-Length. Вы можете начать там.

Можно ли использовать System.Web.HttpRequest? Он позаботится о многих административных деталях разбора ответа для вас ...

Или вы должны использовать сырые сокеты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...