.NET- Apresentando a classe HttpClient - I |
Neste artigo vou apresentar os conceitos básicos relacionados com a API HttpClient que foi introduzida na versão 4.5 da plataforma .NET. |
De forma bem resumida, a classe HttpClient fornece a classe base para enviar requisições HTTP e receber respostas HTTP a partir de uma fonte identificada por uma URI. Assim ela inclui recursos para enviar requisições sobre HTTP bem como usar HttpRequestMessage e HttpResponseMessage para processar mensagens HTTP. (Este recurso não é suportado pelo VS 2010)
O HttpClient é um cliente HTTP para a plataforma .NET que fornece uma API flexível e extensível para acessar tudo que for exposto através do HTTP. Ela era disponibilizada como parte da API WCF Web API mas atualmente faz parte da ASP .NET Web API e também esta disponível diretamente na plataforma .NET versão 4.5.
Você também pode baixar o pacote via Nuget: Install-Package Microsoft.Net.Http
Antes de por a mão na massa e mostrar alguns de seus recursos vou resumir suas características principais.
A classe HttpClient é 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:
A seguir vou mostrar alguns das funcionalidades básicas da API HttpClient.
Recursos usados :
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
A seguir selecione Visual C# -> Console Application;
Informe o nome HttpClient_Demo;
1- Acessando os dados de um endereço URI usando HttpClient
Neste exemplo vamos usar o método GetStringAsync() que é um método assíncrono o que significa que ele retorna um Task<string> e não uma simples string.
Defina os seguintes namespaces para iniciar na classe Program.cs :
using
System;Inclua o código abaixo no método Main():
static void Main(string[] args)
{
try
{
Rodar();
Console.ReadKey();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
|
Na plataforma .NET 4.5 temos as palavras-chave async e await para tratar com métodos assíncronos e assim vou marcar o método como async e usar await para esperar o resultado:
A seguir crie o método Rodar() com o código a seguir:
static async void Rodar()
{
try
{
HttpClient cliente = new HttpClient();
string resultado = await cliente.GetStringAsync("http://www.macoratti.net/vbn_jqsm.htm");
Console.WriteLine(resultado);
}
catch
{
throw;
}
}
|
Dessa forma o HttpClient realiza um Get em uma thread em segundo plano. Ao terminar a tarefa o resultado será passado através do comando await para a string resultado.
Neste exemplo estou obtendo o conteúdo do arquivo vbn_jqsm.htm existente na url : http://www.macoratti.net
O Resultado pode ser visto abaixo:
2- Fazendo o download e uma página com HttpClient
Vamos criar outro projeto tipo Console Application com o nome de Exemplo_2 e defina os seguintes namespaces no arquivo Program.cs:
using
System;A classe HttpClient facilita realizar o download de recursos da web pois realiza isso em uma thread separada.
Neste exemplo vamos usar novamente as palavras async e await.
No método Main vamos iniciar uma tarefa usando o método DownloadAssincrono() para realizar o download de uma página.
static void Main(string[] args)
{
Task t = new Task(DownloadAssincro);
t.Start();
Console.WriteLine("Fazendo o download da página...");
Console.ReadLine();
}
|
A seguir vamos definir o código do método DownloadAssincrono conforme abaixo:
static async void DownloadAssincro()
{
// ... Define a página
string pagina = "http://www.macoratti.net/15/08/vbn5_uwb2.htm";
// ... Usando HttpClient.
using (HttpClient cliente = new HttpClient())
using (HttpResponseMessage resposta = await cliente.GetAsync(pagina))
using (HttpContent conteudo = resposta.Content)
{
// ... Lendo a string
string resultado = await conteudo.ReadAsStringAsync();
// ... Exibe o resutlado
if (resultado != null &&
resultado.Length >= 150)
{
Console.WriteLine(resultado.Substring(0, 150) + "...");
}
}
}
|
No método DownloladAssincrono usamos três instruções using para facilitar a liberação dos recursos usados. Usamos duas vezes a palavra reservada await, a primeira chamando o método GetAsync() e a seguir com ReadAsStringSync() para exibir o resultado que vemos a seguir:
Podemos nota que a funcionalidade da classe HttpClient supera a da classe WebClient, a começar pela sintaxe. Além disso a classe WebClient não suporta as palavras async e await.
Na próxima parte do artigo vou mostrar como chamar uma Web API a partir de um cliente .NET usando a classe HttpClient.
E
Jesus, tendo ouvido isto, disse-lhes: Os sãos não necessitam de médico, mas,
sim, os que estão doentes; eu não vim chamar os justos, mas, sim, os pecadores
ao arrependimento.
Marcos 2:17
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
https://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx
C# - Enviando arquivos para o servidor via FTP - Macoratti.net