CORS / requisição WS externa

23/11/2017

0

Prezados, boa tarde,

Tenho um JS que faz a requisição a uma API para me retornar valores.. funcionou por 5 minutos, porém após isso ele começou a me retornar o seguinte erro:

"Requisição cross-origin bloqueada: A política de mesma origem (Same Origin Policy) impede a leitura do recurso remoto em https://crossorigin.me/http://receitaws.com.br/v1/cnpj/11025025552001. (Motivo: o cabeçalho CORS 'Access-Control-Allow-Origin' não está presente)."

Já tentei colocar o header em php para habilitar o CORS e mais algumas coisas, porém, em teoria, com o crossorigin.me não haveria essa necessidade..
enfim, segue abaixo o JS

	$(document).ready(function() {

        function limpa_formulário_cnpj() {
            // Limpa valores do formulário de cnpj.
            $("#rua").val("");
            $("#bairro_emp").val("");
			$("#nr_emp").val("");
            $("#cidade").val("");
            $("#uf").val("");
            $("#emp").val("");
        }

        //Quando o campo cnpj perde o foco.
        $("#cnpj").blur(function() {

            //Nova variável "cnpj" somente com dígitos.
            var cnpj = $(this).val().replace(/\\D/g, '');

            //Verifica se campo cnpj possui valor informado.
            if (cnpj != "") {

                //Expressão regular para validar o CNPJ.
                var validacnpj = /^[0-9]/;

                //Valida o formato do CNPJ.
                if(validacnpj.test(cnpj)) {

                    //Preenche os campos com "..." enquanto consulta webservice.
                    $("#logradouro").val("...")
                    $("#bairro_emp").val("...")
					$("#nr_emp").val("...")
                    $("#municipio").val("...")
                    $("#uf").val("...")
                    $("#emp").val("...")
					//$("#cnae").val("...")

                    $.getJSON("https://crossorigin.me/http://receitaws.com.br/v1/cnpj/"+ cnpj, function(dados) {

                        if (!("erro" in dados)) {
                            //Atualiza os campos com os valores da consulta.
                            $("#logradouro").val(dados.logradouro);
							$("#nr_emp").val(dados.numero);
                            $("#bairro_emp").val(dados.bairro);
                            $("#municipio").val(dados.municipio);
                            $("#uf").val(dados.uf);
                            $("#emp").val(dados.nome);
							//$("#cnae").val(dados.text);
                        } //end if.
                        else {
                            //Cnpj pesquisado não foi encontrado.
                            limpa_formulário_cnpj();
                            alert("CNPJ não encontrado.");
                        }
                    });
                } //end if.
                else {
                    //cnpj é inválido.
                    limpa_formulário_cnpj();
                    alert("Formato de CNPJ inválido.");
                }
            } //end if.
            else {
                //cnpj sem valor, limpa formulário.
                limpa_formulário_cnpj();
            }
        });
    });


Poderiam me ajudar?
Daniel Lancellotti

Daniel Lancellotti

Responder

Post mais votado

24/11/2017

Olá Daniel,

Esse erro acontece porque por questões de segurança, os navegadores atuais só permitem que se faça chamadas de dados ou scripts no mesmo domínio. Como você está tentando fazer requisições de script em domínio diferente, está obtendo essa mensagem de erro.

Qual linguagem de programação que você está usando no seu server(web services/API) ?

Vou deixar um exemplo abaixo em php e pode ser feito facilmente em outras linguagens.

Para habilitar o CORS basta você retornar um header na página solicitada o header é o Access-Control-Allow-Origin: *

Exemplo em PHP
<?php
        //habilitando o cors
        header("Access-Control-Allow-Origin: *");


Então, para "sumir" essa mensagem de erro, é necessário enviar o header acima na mesma página em que há o script em você chama a requisição script

Qualquer dúvida, avisar!

Valeu!

Rander Freitas

Rander Freitas
Responder

Mais Posts

24/11/2017

Daniel Lancellotti

Eu resolvi de outra forma, mas com uma classe pronta.

Utilizo o PHP mesmo e o estranho é que já usei esse header e mesmo assim não funcionou.. em pesquisas na internet eu achei isso que vc falou e até outros headers que poderiam ser utilizados, porém nenhum funcionou.
Ficava algo assim:

<?php 
include ''menu.php'';
header("Access-Control-Allow-Origin: *");

?>

//resto do código HTML, js, ajax, jquery, php, etc
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar