O WebClient é uma abstração de nível superior criada sobre o HttpWebRequest para simplificar as tarefas mais comuns. Por exemplo, se você deseja obter o conteúdo de um HttpWebResponse, é necessário ler no fluxo de resposta:
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();
Com o WebClient, você apenas faz DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
Nota: Eu deixei de fora as using
declarações de ambos os exemplos por questões de brevidade. Você deve definitivamente descartar seus objetos de solicitação da web corretamente.
Em geral, o WebClient é bom para solicitações simples rápidas e sujas e o HttpWebRequest é bom para quando você precisar de mais controle sobre toda a solicitação.
ServicePointManager.Expect100Continue = false
, faz outras coisas fora do padrão e tem muitas peculiaridades e idiossincrasias. Iniciei o RestSharp para ajudar a resolver esses problemas.HttpClient
que vem com o .NET 4.5 que pode (ou não pode) resolver alguns dos aborrecimentos acima ...using (WebClient client = new WebClient())
O WebClient também não possui propriedade de tempo limite. E esse é o problema, porque o valor dafault é de 100 segundos e é demais para indicar se não há conexão com a Internet.
A solução alternativa para esse problema está aqui https://stackoverflow.com/a/3052637/1303422
fonte
Sei que é muito tempo para responder, mas apenas como um objetivo informativo para futuros leitores:
WebRequest
A
WebRequest
é uma classe base abstrata. Então você realmente não o usa diretamente. Você o usa através das classes derivadas -HttpWebRequest
eFileWebRequest
.Você usa o método Create de
WebRequest
para criar uma instância deWebRequest
.GetResponseStream
retornadata stream
.Existem também
FileWebRequest
eFtpWebRequest
classes queinherit
deWebRequest
. Normalmente, você costumaWebRequest
fazer, bem, fazer uma solicitação e converter o retorno emHttpWebRequest
,FileWebRequest
ouFtpWebRequest
, depende da sua solicitação. Abaixo está um exemplo:Exemplo:
Cliente da web
WebClient
fornece operações comunssending
ereceiving
dados de um recurso identificado por aURI
. Simplesmente, é uma abstração de nível superior deHttpWebRequest
. A '' operações comuns é o que diferenciaWebClient
a partir deHttpWebRequest
, como também mostrado no exemplo abaixo:Exemplo:
Também existem
DownloadData
eDownloadFile
operações sobWebClient
instância. Essas operações comuns também simplificam o código do que normalmente faríamosHttpWebRequest
. UsandoHttpWebRequest
, temos que obter a resposta da nossa solicitação, instanciarStreamReader
para ler a resposta e, finalmente, converter o resultado para o tipo que esperamos. ComWebClient
, simplesmente chamamosDownloadData, DownloadFile or DownloadString
.No entanto, lembre-se de que
WebClient.DownloadString
não consideraencoding
o recurso que você está solicitando. Portanto, você provavelmente acabaria recebendo caracteres estranhos se não especificar e codificar.OBSERVAÇÃO: Basicamente "o WebClient usa poucas linhas de código em comparação com o Webrequest "
fonte
webClient.UploadData(url, "POST", bytes)
para especificar o método (consulte a documentação do MSDN ).