WebClient est une abstraction de plus haut niveau construite sur HttpWebRequest pour simplifier les tâches les plus courantes. Par exemple, si vous souhaitez extraire le contenu d'un HttpWebResponse, vous devez lire à partir du flux de réponse:
var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
Avec WebClient, il vous suffit de faire DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
Remarque: j'ai omis les using
déclarations des deux exemples par souci de concision. Vous devez absolument veiller à disposer correctement vos objets de requête Web.
En général, WebClient est bon pour les requêtes simples rapides et sales et HttpWebRequest est bon lorsque vous avez besoin de plus de contrôle sur l'ensemble de la demande.
ServicePointManager.Expect100Continue = false
, comme faire d'autres choses non standard et a de nombreuses bizarreries et particularités. J'ai lancé RestSharp pour aider à résoudre ces problèmes.HttpClient
.NET 4.5 qui peut (ou non?) Résoudre certains des problèmes ci-dessus ...using (WebClient client = new WebClient())
De plus, WebClient n'a pas de propriété timeout. Et c'est le problème, car la valeur dafault est de 100 secondes et c'est trop pour indiquer s'il n'y a pas de connexion Internet.
La solution de contournement pour ce problème est ici https://stackoverflow.com/a/3052637/1303422
la source
Je sais que c'est trop long pour répondre, mais juste à titre d'information pour les futurs lecteurs:
Demande Web
La
WebRequest
est une classe de base abstraite. Vous ne l'utilisez donc pas directement. Vous l'utilisez à travers ses classes dérivées -HttpWebRequest
etFileWebRequest
.Vous utilisez la méthode Create de
WebRequest
pour créer une instance deWebRequest
.GetResponseStream
revientdata stream
.Il y a aussi des classes
FileWebRequest
et des . Normalement, vous devez utiliser , eh bien, faire une demande et convertir le retour à l'une ou l' autre , ou , dépendent de votre demande. Voici un exemple:FtpWebRequest
inherit
WebRequest
WebRequest
HttpWebRequest
FileWebRequest
FtpWebRequest
Exemple:
WebClient
WebClient
fournit des opérationssending
et desreceiving
données communes à une ressource identifiée par aURI
. Simplement, c'est une abstraction de plus haut niveau deHttpWebRequest
. Cette « opérations courantes » est ce qui différencieWebClient
deHttpWebRequest
, comme également indiqué dans l'exemple ci - dessous:Exemple:
Il y a aussi
DownloadData
et desDownloadFile
opérations sousWebClient
instance. Ces opérations courantes simplifient également le code de ce que nous ferions normalementHttpWebRequest
. En utilisantHttpWebRequest
, nous devons obtenir la réponse de notre requête, instancierStreamReader
pour lire la réponse et enfin, convertir le résultat dans le type attendu. AvecWebClient
, nous appelons simplementDownloadData, DownloadFile or DownloadString
.Cependant, gardez à l'esprit que
WebClient.DownloadString
cela ne tient pas compteencoding
de la ressource que vous demandez. Donc, vous finiriez probablement par recevoir des caractères étranges si vous ne spécifiez pas et n'encodez pas.REMARQUE: Fondamentalement, " WebClient prend quelques lignes de code par rapport à Webrequest "
la source
webClient.UploadData(url, "POST", bytes)
pour spécifier la méthode (voir la documentation MSDN ).