.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:

  1. Uma instância HttpClient é usada para configurar extensões, definir headers padrão, cancelar requests e mais;
  2. Você pode emitir tantos pedidos quantos quiser através de uma única instância HttpClient;
  3. HttpClients não estão vinculados a um determinado servidor HTTP ou host; você pode enviar qualquer solicitação HTTP usando a mesma instância HttpClient;
  4. Você pode derivar de HttpClient para criar clientes especializados para determinados sites ou padrões;
  5. A classe HttpClient usa o novo padrão orientada a tarefa (Task) para lidar com solicitações assíncronas, possibilitando assim, gerenciar e coordenar de forma mais fácil solicitações pendentes;

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;
using
System.Net.Http;

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;
using
System.Net.Http;
using
System.Threading.Tasks;

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:


José Carlos Macoratti