Ответ 1
Использование HttpWebRequest
дает вам больше контроля над запросом. Вы можете установить файлы cookie, заголовки, протокол и т.д. В ответ вы также можете получить файлы cookie и заголовки
Мне кажется, что большинство из того, что может быть достигнуто с помощью HttpWebRequest/Response
, также можно выполнить с помощью класса WebClient
. Я где-то читал, что WebClient
- это оболочка высокого уровня для WebRequest/Response
.
До сих пор я не вижу ничего, что может быть достигнуто с помощью HttpWebRequest/Response
, которое невозможно выполнить с помощью WebClient
, а также где HttpWebRequest/Response даст вам более "мелкозернистый" контроль.
Когда следует использовать WebClient и HttpWebRequest/Response
? (Очевидно, что HttpWebRequest/Response
являются специфичными для HTTP.)
Если HttpWebRequest/Response
- нижний уровень, то WebClient
, что я могу выполнить с помощью HttpWebRequest/Response
, которого я не могу выполнить с помощью WebClient
?
Использование HttpWebRequest
дает вам больше контроля над запросом. Вы можете установить файлы cookie, заголовки, протокол и т.д. В ответ вы также можете получить файлы cookie и заголовки
HttpWebRequest
предоставляет гораздо больше материалов, которые позволяют вам управлять мелким зернистым протоколом, например: хотите ли вы использовать Keep-Alive, какой пул подключений использовать, буферизировать записи или нет и т.д.
WebClient
не выставляет все из них (хотя вы можете подклассом из WebClient
и getaccess для основного объекта запроса).
WebClient
полезен для ситуаций, когда вы просто хотите выполнить операцию (например: POST/GET/Form upload) и не можете беспокоиться о создании и управлении HttpWebRequest
, RequestStream
, HttpWebResponse
, и поток ответов.
Из блога Тима Хейера - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
Вместо этого в Silverlight вы захотите использовать WebClient или HttpWebRequest. Какая разница? Здесь версия timheuer. WebClient - это более простая реализация, которая действительно делает запросы GET и получает поток ответов. HttpWebRequest отлично подходит, когда вам требуется более подробный контроль над запросом, нужно отправлять заголовки или другие настройки.
Класс WebClient выполняется в потоке пользовательского интерфейса, поэтому пользовательский интерфейс не реагирует, когда данные загружаются из Интернета. С другой стороны, класс HttpWebRequest не блокирует поток пользовательского интерфейса, и ваше приложение реагирует. Таким образом, в приложениях, где большой объем данных должен быть загружен из Интернета или если источник данных работает медленно, вы должны использовать класс HttpWebRequest; во всех остальных случаях вы должны использовать класс WebClient.
"HtttpWebRequest" устарел в .NET 4.5. Теперь этот класс является только внутренним.
Еще одна вещь, которую HttpWebrquest позволяет вам сжать, но он класс Net.WebClient не поддерживает HTTP-сжатие
Другим недостатком WebClient
является то, что он игнорирует значение HTTP ContentType
charset
, когда вы используете его для получения текста ответа. Вы должны явно установить кодировку с помощью свойства Encoding
.
Один пример. Проводка данных и получение обработанных данных в одном цикле запроса/ответа, по-видимому, невозможны с помощью WebClient, но вы можете сделать это с помощью HtttpWebRequest.