Correios: Webservice para consulta de endereços a partir de um CEP

correiosOlá pessoal, tudo bom?

O Correio disponibiliza um Webservice gratuito, pelo menos por enquanto, para consulta de endereços a partir de um determinado CEP.

O acesso ao Webservice se dá a partir da URL: https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl

Para demonstrar seu funcionamento, segue um trecho de código de uma aplicação ASP.NET


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TesteWS.aspx.cs" Inherits="ConsultaCEP.TesteWS" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
    <h1>Teste WS dos Correios</h1><br />
    <asp:Panel ID="Panel1" runat="server" GroupingText="Busca Endereço">
      CEP:
      <asp:TextBox ID="txtCep" runat="server"></asp:TextBox>&amp;nbsp;<asp:Button ID="btnBuscarEndereco" runat="server" OnClick="btnBuscarEndereco_Click" Text="Buscar Endereço" />
      <br />
      <asp:Label ID="lblEndereco" runat="server"></asp:Label>
    </asp:Panel>
    </div>
  </form>
</body>
</html>

Resultado do código ASP.NET acima.
Resultado do código ASP.NET acima

Na sequencia, temos a implementação em C# para tratar o clique do botão Buscar Endereço


protected void btnBuscarEndereco_Click(object sender, EventArgs e)
{
  wsCorreio.AtendeClienteClient ws = new wsCorreio.AtendeClienteClient("AtendeClientePort"); //Verificar o nome do endpoint no arquivo Web.config
  var dados = ws.consultaCEP(txtCep.Text);
  if (dados != null)
  {
    lblEndereco.Text = string.Format(@"Endereço: {0}<br />
                       Complemento 1: {1}<br />
                       Complemento 2: {2}<br />
                       Bairro: {3}<br />
                       Cidade: {4}<br />
                       Estado: {5}",
                       dados.end,
                       dados.complemento,
                       dados.complemento2,
                       dados.bairro,
                       dados.cidade,
                       dados.uf);
  }
  else
    lblEndereco.Text = "CEP não encontrado.";
}

Dados do endereço de acordo com o CEP informado
Dados do endereço de acordo com o CEP informado

Dado o exemplo, agora basta adaptar para sua aplicação, seja ela ASP.NET, Windows Form, Windows Phone, etc.

Grande abraço,
Eduardo Henrique Rizo

[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]

 

34 comentários em “Correios: Webservice para consulta de endereços a partir de um CEP”

  1. Boa tarde,
    Primeiramente, parabens pelo seu trabalho. Estou começando a me aventurar no mundo do WP e estou exclarecendo muitas dúvidas aqui.
    Gostaria de saber se à alguma forma de recupegar a minha localização. Estou desenvolvendo um APP para meu TCC e preciso saber qual a localização do celular, mas não sei como fazer isso.
    Help me kkkkk
    Desde já agradeço.
    Att,

    1. Boa noite, tudo bom?
      Não tenho nenhum exemplo pronto sobre isso, mas vou escrever um post sobre o assunto.
      Creio que amanhã ou depois já estará disponível no meu blog.

      Abraços,
      Eduardo H. Rizo

  2. Boa tarde,

    Estou tentando usar esta solução mas quando tento adicionar o service referencia com este endereço retorna o seguinte erro:

    There was an error downloading ‘http://sigep.correios.com.br/sigep/update/AtendeClienteService.wsdl/_vti_bin/ListData.svc/$metadata’.
    The request failed with HTTP status 404: Not Found.

    Sabe o que pode ser?

    Obrigado.

  3. Eduardo, eu estou tentando usar esse webservice aqui mas ele está dando erro nessa linha:

    wsCorreios.AtendeClienteService ws = new wsCorreios.AtendeClienteService(“AtendeClientePort”); //Verificar o nome do endpoint no arquivo Web.config

    tive que trocar o AtendeClienteClient porque no novo link do webservice dos correios essa config nao aparece.
    Fiz errado?

      1. Sim, eles trocaram e junto com ele alguns argumentos. Como o AtendeClienteClient. Nao existe esse argumento mais, ou seja nao consigo referenciá-lo. O unico que aparece pra mim é o AtendeClienteService

  4. Tentei, e no try catch, ele da o seguinte erro ao digitar um cep invalido

    An exception of type ‘System.Web.Services.Protocols.SoapException’ occurred in System.Web.Services.dll but was not handled in user code

    Additional information: CEP NAO ENCONTRADO

    Ele retorna isso no VS, e não no webform como deveria ser

  5. Muito bom, mas amigo, me explica o motivo de tu ter atribuído o conteúdo do webservice numa var chamado dados e depois pegar esses dados e atribuir a uma string, por que tu não usou o do próprio dados?

    1. Olá Vitor, na verdade eu não atribui a uma string, mas sim usei o string.format para me ajudar na hora da exibição dos dados.
      Repare que no final do string.format eu uso o “dados” para poder ter acesso ao conteúdo.

      Abraços,
      Eduardo H. Rizo

  6. Boa tarde,

    Estou utilizando este modulo para geração de etiquetas, porem mesmo com dados certos, recebo uma exceção na autenticação. Informa que a autenticação falhou.

    Você já utilizou esse serviço?

    Obrigado

    1. Olá Patrick, tudo bom?
      Esse webservice disponibiliza gratuitamente apenas o método consultaCEP, sendo que para usar os demais é necessário ser cliente dos Correios.
      Você está usando o método consultaCEP ou outro?

      At.,
      Eduardo H. Rizo

      1. Olá ehrizo,

        Sou cliente dos correios e pretendo utilizar o serviço para gerar etiquetas para meus produtos.
        Utilizo o serviço AtendeClienteClient(), mas ao tentar acessar metodos que precisam de autenticação como getStatusCartaoPostagem(), buscaCliente() e verificaDisponibilidadeServico() recebo o erro “”A autenticacao de xxxxxxxx falhou!””

        Já utilizou algum deles?

        Abraço

      2. Desculpe, nunca usei nenhum desses.
        Vocês já tentou o suporte dos correios?

        Abraços,
        Eduardo H. Rizo

  7. Estou tentando uma implementação em php via simplexml_load_file. Neste caso, é necessário passar variáveis na url. Estou fazendo assim:

    function encontraCep() {
    $cep = $_POST[“txtCep”];

    $url = “https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl&txtCep=”.$cep;
    $xml = simplexml_load_file($url);

    return $xml;

    }

    dados = encontraCep();

    um

    print “”;
    print_r($dados);
    print “”;

    Me retorna:

    SimpleXMLElement Object
    (
    [@attributes] => Array
    (
    [name] => AtendeClienteService
    [targetNamespace] => http://cliente.bean.master.sigep.bsb.correios.com.br/
    )

    )

    Onde estou errando?

      1. Olá Carlos, como vai?
        Em ASP.NET eu criei uma referência ao serviço do WebService (via Visual Studio). Essa referência se dá pela menção ao objeto wsCorreio.

        Ok?

  8. Bom dia,

    Estou recebendo este erro: “Não foi possível estabelecer uma relação de confiança para o canal protegido SSL/TLS com a autoridade ‘apphom.correios.com.br’.” ao tentar realizar a comunicação.
    Poderia me auxiliar na configuração para a comunicação?

    1. Olá, tudo bom?

      No projeto, clique com o botão direito em References e selecione a opção “Add Service Reference…”.

      []s
      Eduardo H. Rizo

  9. Alguém sabe informar se esta URL foi alterada? No módulo FK Customers tem esta mesma função mas a requisição não está funcionando. Ao colar a URL no navegador aparece a resposta: This XML file does not appear to have any style information associated with it. The document tree is shown below.

    1. Os correios oferecem uma vasta gama de opções de uso do seu webservices, no entanto, o único gratuito é o de consultar o CEP.

      Abraços,
      Eduardo H. Rizo

  10. Ehrizo,

    Vocâ já consumiu esse webservice para CEP com sucesso?
    Ou isso foi PURAMENTE teórico?

    Me parece que você NÃO leu atentamente a documentação!

    1. Olá, tudo bem Murilo?
      Eu escrevi esse post já faz algum tempo. Fiz um teste hoje, só para conferência, e o webservices continua funcionando adequadamente. Você enfrentou alguma dificuldade?

      Sobre a documentação, qual parte você considera que não foi lida atentamente? Poderia esclarecer?

      Abraços

Deixe um comentário para Ricardo melo Cancelar resposta