Skip to main content

Fala, galera! Beleza? Nesse artigo vou lhes mostrar como automatizar consultas de CEPs no site dos Correios através da biblioteca HtmlAgilityPack (HTML Agility Pack) para .NET Core.

Vamos lá!

Obs: para não deixar o artigo muito extenso, não vou explicar o passo a passo para se criar uma aplicação console no .NET Core.

Instalando a biblioteca HTML Agility Pack

Após a criação da aplicação console, instale a biblioteca do HtmlAgilityPack através do NuGet .

Você pode instalar usando o NuGet dentro do Visual Studio:

HTML Agility Pack - NuGet
NuGet dentro do Visual Studio com HtmlAgilityPack selecionado
Pacote HTML Agility Pack instalado
Pacote HTML Agility Pack instalado

Agora que já temos nosso pacote instalado, vamos adicionar o seguinte trecho de código:

Classe Program.cs com o início do código
Classe Program.cs com o início do código

Uma breve explicação do trecho acima:

Primeiro, pedimos para que o usuário insira o CEP para que a nossa aplicação busque o endereço correspondente. Após isso, passamos o CEP digitado para o nosso método chamado “BuscaEnderecoPeloCEP(cep)”.

Método BuscaEnderecoPeloCEP
Método BuscaEnderecoPeloCEP

Nessa primeira parte do nosso método, criamos três variáveis do tipo “string”: “httpResponse, html e UrlCorreio”.

Observação: A variável “httpResponse” será responsável por armazenar o html que é retornado após enviarmos uma requisição do tipo POST para o endereço dos Correios (armazenado na variável “UrlCorreio”).

Após isso, iniciamos o nosso bloco “Try-catch”. Dentro dele, criamos uma variável do tipo “Dictionary<string, string>” (Aqui, pode-se usar qualquer coleção que seja do tipo Chave-Valor).

Iremos enviar essa coleção como um “FormUrlEncodedContent” dentro do nosso “HttpRequestMessage”. Para fazer a requisição para a url dos correios, criamos um bloco “using” instanciando um objeto do tipo “HttpClient”. Esse objeto será responsável por fazer a requisição HTTP.

Final do método BuscaEndereco
Final do método BuscaEndereco

Aqui, instanciamos um objeto do tipo “HtmlDocument” (classe do HtmlAgilityPack). Para podermos extrair todas as informações contidas dentro html retornado, passamos o html para o método “LoadHtml()”.

A váriavel “name” é do tipo “HtmlNodeCollection” e receberá todas as informações contidas na tag html “td”.

As variáveis “bairro, cidade e rua”, receberão as informações contidas nas posições dessa coleção (“name[1], name[2], name[0]”, respectivamente).

Por fim, a variável “endereco” receberá a concatenação das informações contidas em “bairro, cidade e rua” e então retornaremos essa informação.

Caso ocorra alguma exception, retornaremos a mensagem do erro. (é possível melhorar, e muito, esse tipo de tratamento. Porém, não é o assunto principal aqui).

Como forma de estudo e afim de abstrair essas funcionalidades, em março de 2020, criei uma biblioteca em .NET Standard 2.0 para realizar essas consultas. Inclusive, é possível buscar os CEPs a partir de um endereço. Caso queira conferir, vou deixar os links aqui:

Escrito por: João Paulo

Para Medium: https://medium.com/@j_paulo_15/automatizando-consultas-de-cep-com-htmlagilitypack-565f6fba2ac

BRQ fale conosco