Neste artigo vamos comparar 3 maneiras de realizar requisições HTTP : HttpWebReques, WebClient e HttpClient. |
A plataforma .NET oferece 3 classes diferentes para consumir APIs REST. (Além delas a comunidade criou a RestSharp.)
Vamos fazer uma análise resumida de cada uma das classes envolvidas e tirar as nossas conclusões para saber qual a mais indicada para uso.
1- HttpWebRequest/HttpWebResponse
No princípio as classes padrão para consumir requisições HTTP eram : HttpWebRequest e HttpWebResponse que implementam as interfaces WebRequest e WebResponse.
A classe HttpWebRequest lhe dá controle em cada aspecto do objeto request/response como: timeouts, headers, protocols, etc. além de não bloquear a thread da interface com o usuário.
Dessa forma a classe HttpWebRequest fornece suporte para as propriedades e métodos definidos na classe WebRequest e para propriedades e métodos adicionais que permitem interagir usando o protocolo HTTP.
- O
método Create() de uma instância da classe WebRequest para iniciar
os objetos HttpWebRequest;
- O método GetResponse() realiza uma requisição síncrona através da
propriedade RequestUri, retornando um objeto HttpWebResponse
contendo a resposta de uma requisição;
- O método GetRequestStream() obtém um objeto stream usado para
escrever os dados da requisição;
O problema é que para fazer um simples request precisamos de 5 linhas de código :
using System.IO
using System.Net
HttpWebRequest http = (HttpWebRequest)WebRequest.Create("http://macoratti.net");
WebResponse response = http.GetResponse();
MemoryStream stream = (MemoryStream)response.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string content = sr.ReadToEnd();
|
Assim, a chance de você cometer erros usando esta classe é maior. Dessa forma utilize essa opção se você precisar um controle adicional de baixo nível que ela oferece.
2- WebClient
A classe WebClient é uma abstração de alto nível construída no topo do HttpWebRequest para simplificar as tarefas mais simples envolvidas nas requisições HTTP.
Ela fornece métodos para enviar dados ou receber dados de qualquer recurso identificado pela URI; seja local , intranet ou internet. Assim temos:
Método para fazer o envio de arquivos para um recurso:
Métodos para fazer o download de arquivos a partir de um recurso:
Usar WebClient é um pouco mais lento que HttpWebRequest, mas essa desvantagem traz alguns benefícios como precisar de menos código e ser mais fácil de usar.
Assim para fazer uma requisição precisamos apenas de duas linhas de código ao invés de cinco usadas na classe HttpWebRequest:
using System.Net;
var cliente = new WebClient();
var text = cliente.DownloadString("http://macoratti.net/teste.html");
|
3- HttpClient
A classe HttpClient fornece poderosas funcionalidades e uma sintaxe melhor para os novos recursos da threading como dar suporte a await, além de habilitar o download em threads com melhor verificação e validação de código.
Assim classe HttpClient é atualmente a classe principal usada para enviar e receber mensagens HTTP através de HttpRequestMessage e HttpResponseMessage.
Se você já utilizou anteriormente as classes WebClient e HttpWebRequest vai notar que a classe HttpClient possui diferenças importantes a saber:
using System.Net.Http;
HttpClient cliente = new HttpClient();
string resultado = await cliente.GetStringAsync("http://www.macoratti.net/vbn_jqsm.htm");
|
O único problema é que ela esta disponível somente a partir da versão 4.5 da plataforma .NET. A partir desta versão a recomendação é usar esta classe.
"Porque estas nações, que hás de
possuir, ouvem os prognosticadores e os adivinhadores; porém a ti o Senhor teu
Deus não permitiu tal coisa."
Deuteronômio 18:14
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VB .NET - Obtendo informações de uma web page - Macoratti.net
Consumindo uma Web API em um projeto WPF ... - Macoratti.net