2013-09-25 2 views
2

У меня есть программа, которая делает много HttpWebRequests, и я прочитал об использовании сжатия gzip, чтобы ускорить загрузку данных ответа. Я знаю, что такое gzip, и как это работает, но я не знаю, как это работает на C#.C# HttpWebRequest - Использование сжатия Gzip

Скажем, у меня есть простой запрос GET:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://google.com"); 
request.Method = "GET"; 
WebResponse response = request.GetResponse(); 

Как я мог сделать данные ответа быть сжаты в Gzip? Как я могу показать сжатый размер, а затем не сжатый размер?

Благодаря

ответ

3

Убедитесь, что вы указали в своем запросе, что можете принимать ответы gzip'd. Таким образом, после того, как код, чтобы создать запрос, выполните следующие действия:

request.Headers.Add("Accept-Encoding", "gzip"); 

Это сообщит серверу, чтобы вернуть его промелькнул, если это возможно.

Единственный способ, который я могу представить, чтобы показать разницу в размерах, будет сделать 2 вызова, один с сжатием и один нет, и сравнить длину возвращаемых потоков откликов.

9

См this page для синопсис как GZip работает с веб-запросов в целом.

Конкретный заголовок, который вам нужно отправить, - Accept-Encoding: gzip. Обычно вам нужно добавить это к запросу самостоятельно (через коллекцию Headers), но есть ярлык. За this answer, все, что вам нужно сделать, это добавить

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

к коду.

Обратите внимание, что вы, вероятно, не сможете получить сжатые/несжатые размеры, делая это - запрос будет автоматически распаковывать его, когда он входит. Однако, поскольку вы не можете заранее знать, будет ли сервер даже попробуйте отправить вам GZipped-страницы, это не очень полезно тестировать.

+0

После того, как я хочу прочитать данные из ответа, который я обычно использовал бы StreamReader для, нужно ли мне что-то делать специальным? – user2764359

+0

Nope. Вот почему это * Автоматическая * Декомпрессия. Насколько я могу судить, все это вам подойдет. (Я не пробовал это сам, но я буду, теперь, когда я знаю об этом!) – Bobson

+0

Хорошо, спасибо! – user2764359

Смежные вопросы