O que é uma Requisição HTTP/HTTPS?
Uma requisição é essencialmente uma mensagem enviada por um cliente (como seu navegador ou um app em C#) para um servidor, pedindo alguma ação (ler dados, salvar, deletar). O servidor processa e devolve uma "Resposta".
🌐HTTP
Hypertext Transfer Protocol
É o protocolo base da internet. Ele define as regras de como as mensagens são formatadas e transmitidas. O problema: os dados viajam em "texto puro". Se alguém interceptar a conexão (ataque Man-in-the-Middle), poderá ler tudo, incluindo senhas.
🔒HTTPS
HTTP Secure (com TLS/SSL)
É o próprio HTTP, mas envelopado em uma camada de criptografia. Os dados são embaralhados antes de sair do cliente e só podem ser desembaralhados pelo servidor destino. Garante confidencialidade e integridade.
O Dicionário da Web: Verbos HTTP
Quando fazemos uma requisição, informamos um "Verbo" (ou Método) para dizer ao servidor exatamente qual é a nossa intenção.
Dissecando o Código (ViaCEP)
Abaixo está a explicação linha a linha do código C# que você forneceu para consultar CEPs. A requisição utiliza o verbo GET (pois apenas lemos os dados da API pública do ViaCEP).
Exemplo de código consumindo a API ViaCEP
viacep_exemplo.cs
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
// Modelo de dados para receber o JSON do ViaCEP
public class Endereco
{
public string Cep { get; set; }
public string Logradouro { get; set; }
public string Complemento { get; set; }
public string Bairro { get; set; }
public string Localidade { get; set; }
public string Uf { get; set; }
}
class Program
{
static async Task Main()
{
string cep = "01001000";
string url = $"https://viacep.com.br/ws/{cep}/json/";
using HttpClient client = new HttpClient();
try
{
Endereco endereco = await client.GetFromJsonAsync<Endereco>(url);
if (endereco != null && endereco.Cep != null)
{
Console.WriteLine($"Rua: {endereco.Logradouro}");
Console.WriteLine($"Bairro: {endereco.Bairro}");
Console.WriteLine($"Cidade/Estado: {endereco.Localidade}/{endereco.Uf}");
}
else
{
Console.WriteLine("CEP não encontrado.");
}
}
catch (Exception ex)
{
Console.WriteLine($"Erro na requisição: {ex.Message}");
}
}
}
1. Importações (Usings)
using System.Net.Http.Json; etc. Essas linhas importam as bibliotecas necessárias do .NET. O System.Net.Http traz o motor de requisições HTTP e a extensão .Json traz ferramentas para converter respostas JSON automaticamente.
2. Classe Endereco (DTO)
A classe Endereco atua como um molde. Suas propriedades (Cep, Logradouro, etc.) têm os mesmos nomes exatos das chaves no JSON retornado pela API do ViaCEP. Isso permite a conversão automática (deserialização).
3. Configuração Inicial
string cep = "01001000"; e a url interpolada preparam o endereço HTTPS exato onde a requisição será feita.
4. A Ferramenta: HttpClient
using HttpClient client = new HttpClient();
O HttpClient é a classe do C# usada para enviar e receber requisições da web. A palavra using garante que ele libere a memória (e a conexão de rede) assim que terminar de ser usado.
5. O Verbo GET na Prática (O Coração)
Endereco endereco = await client.GetFromJsonAsync<Endereco>(url);
Esta única linha faz 3 coisas fantásticas simultaneamente:
- Dispara uma requisição usando o Verbo GET para a URL via HTTPS.
- Espera a resposta chegar (por causa do await).
- Pega a resposta em formato de texto (JSON) e converte instantaneamente para um objeto C# do tipo <Endereco>.
6. Tratamento da Resposta
O bloco if (endereco != null && endereco.Cep != null) verifica se a conversão deu certo e se o ViaCEP não retornou um erro (como CEP inexistente). Se tudo estiver OK, imprime as propriedades na tela do console.
7. Bloco Try / Catch
O try { ... } catch (Exception ex) é uma blindagem de segurança. Requisições de rede podem falhar por falta de internet, site fora do ar (timeout) ou URLs inválidas. O catch captura esse "crash" da rede e mostra uma mensagem amigável ao invés de fechar o programa bruscamente.