WebClient contre HttpWebRequest / HttpWebResponse
-
18-09-2019 - |
Question
Il me semble que la plupart de ce qui peut être accompli avec HttpWebRequest/Response
peut également être accompli avec WebClient
classe. J'ai lu quelque part que WebClient
est une enveloppe de haut niveau pour WebRequest/Response
.
Jusqu'à présent, je ne vois rien qui peut être accompli avec HttpWebRequest/Response
qui ne peut être accompli avec WebClient
, ni où HttpWebRequest / réponse vous donnera plus « à grains fins » contrôle.
Quand dois-je utiliser WebClient et quand HttpWebRequest/Response
? (De toute évidence, sont HttpWebRequest/Response
HTTP spécifiques.)
Si HttpWebRequest/Response
niveau inférieur sont alors de WebClient
, que puis-je accomplir avec HttpWebRequest/Response
que je ne peux pas accomplir avec WebClient
?
La solution
Utilisation HttpWebRequest
vous donne plus de contrôle sur la demande. Vous pouvez définir les cookies, les en-têtes, protocole, etc ... Dans la réponse, vous pouvez également récupérer les cookies et les en-têtes
Autres conseils
HttpWebRequest
expose beaucoup plus de choses qui vous permet à grains fins de contrôle de protocole, par exemple:. Si vous voulez utiliser Keep-Alive, ce pool de connexions à utiliser, que ce soit pour tamponner écrit ou non, etc
WebClient
n'expose pas tous ceux (bien que vous pouvez sous-classe de WebClient
et GetAccess à l'objet de demande sous-jacente).
WebClient
est utile pour les situations où vous voulez juste faire une opération (par exemple: POST / GET / upload de formulaire). Et la flemme de créer et de gérer le HttpWebRequest
, RequestStream
, HttpWebResponse
et flux de réponse
Du blog de Tim Heuer - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
Au lieu de Silverlight vous souhaitez utiliser WebClient ou HttpWebRequest. Quelle est la différence? Voici la version timheuer. WebClient est une implémentation plus simple de faire des requêtes GET très facilement et d'obtenir un flux de réponse. HttpWebRequest est idéal lorsque vous avez besoin d'un peu plus de contrôle granulaire sur la demande, besoin d'envoyer des en-têtes ou autres personnalisations.
WebClient classe fonctionne sur le thread d'interface utilisateur, de sorte que l'interface utilisateur ne répond pas lorsque les données sont en cours de téléchargement sur Internet. D'autre part, le HttpWebRequest classe ne bloque pas le thread d'interface utilisateur et votre application est sensible. Ainsi, dans les applications où une grande quantité de données doit être téléchargé sur Internet ou si la source des données est lent à l'accès, vous devez utiliser la classe HttpWebRequest; dans tous les autres cas, vous devez utiliser la classe WebClient.
Une chose HttpWebrquest permet la compression mais il vous Net.WebClient classe ne prend pas en charge la compression HTTP
Un autre inconvénient de WebClient
est il ignore la valeur de ContentType
de HTTP charset
lorsque vous l'utilisez pour obtenir le texte de réponse. Vous devez définir explicitement l'encodage via la propriété Encoding
.
Le "HtttpWebRequest" est obsolète dans .NET 4.5. Maintenant, cette classe est interne uniquement.
Un exemple:. Les données d'affichage et d'obtenir des données de retour traitées dans une demande / cycle de réponse semble être impossible avec WebClient, mais vous pouvez le faire avec HtttpWebRequest