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
Poderiam me ajudar?
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
Curtir tópico
+ 0
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
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!
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
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:
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
Clique aqui para fazer login e interagir na Comunidade :)