WebClient to abstrakcja wyższego poziomu zbudowana na podstawie HttpWebRequest w celu uproszczenia najczęściej wykonywanych zadań. Na przykład, jeśli chcesz pobrać zawartość z HttpWebResponse, musisz przeczytać ze strumienia odpowiedzi:
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();
Dzięki WebClient po prostu DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
Uwaga: using
dla zwięzłości pominąłem oświadczenia z obu przykładów. Zdecydowanie powinieneś zadbać o prawidłowe usunięcie obiektów żądań WWW.
Ogólnie rzecz biorąc, WebClient jest dobry dla szybkich i brudnych prostych żądań, a HttpWebRequest jest dobry, gdy potrzebujesz większej kontroli nad całym żądaniem.
ServicePointManager.Expect100Continue = false
robienie innych niestandardowych rzeczy i ma wiele dziwactw i osobliwości. Uruchomiłem RestSharp, aby rozwiązać te problemy.HttpClient
.NET 4.5, który może (lub nie może?) Rozwiązać niektóre z powyższych problemów ...using (WebClient client = new WebClient())
Również WebClient nie ma właściwości limitu czasu. I to jest problem, ponieważ domyślna wartość to 100 sekund, a to za dużo, aby wskazać, że nie ma połączenia z Internetem.
Obejście tego problemu jest tutaj: https://stackoverflow.com/a/3052637/1303422
źródło
Wiem, że to zbyt długo, aby odpowiedzieć, ale tylko jako cel informacyjny dla przyszłych czytelników:
WebRequest
WebRequest
Jest abstrakcyjną klasą bazową. Więc właściwie nie używasz go bezpośrednio. Używasz go za pośrednictwem klas pochodnych -HttpWebRequest
iFileWebRequest
.Używasz metody Create of,
WebRequest
aby utworzyć wystąpienieWebRequest
.GetResponseStream
zwracadata stream
.Są też
FileWebRequest
iFtpWebRequest
klasyinherit
z tegoWebRequest
. Normalnie byłoby użyćWebRequest
do, dobrze, złożyć zamówienie i konwertować zwrotu alboHttpWebRequest
,FileWebRequest
lubFtpWebRequest
, zależy od wniosku. Poniżej przykład:Przykład:
WebClient
WebClient
zapewnia wspólne operacjesending
ireceiving
dane z zasobu zidentyfikowanego przez aURI
. Po prostu jest to abstrakcja wyższego poziomuHttpWebRequest
. Ten „wspólnych operacji” jest co odróżnieniaWebClient
odHttpWebRequest
, jak również pokazano w poniższym przykładzie:Przykład:
Istnieją również
DownloadData
iDownloadFile
operacje w ramachWebClient
instancji. Te wspólne operacje upraszczają również kod tego, co normalnie robilibyśmyHttpWebRequest
. UżywającHttpWebRequest
, musimy uzyskać odpowiedź na nasze żądanie, zainicjowaćStreamReader
odczytanie odpowiedzi i ostatecznie przekonwertować wynik na dowolny typ, jakiego oczekujemy. PoWebClient
prostu dzwonimyDownloadData, DownloadFile or DownloadString
.Pamiętaj jednak, że
WebClient.DownloadString
nie uwzględniaencoding
to żądanego zasobu. Więc prawdopodobnie otrzymasz dziwne znaki, jeśli nie określisz i nie zakodujesz.UWAGA: Zasadniczo „ WebClient zajmuje kilka wierszy kodu w porównaniu z Webrequest ”
źródło
webClient.UploadData(url, "POST", bytes)
do określenia metody (zobacz dokumentację MSDN ).