Ir para conteúdo

gustavopinent

Members
  • Total de itens

    67
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre gustavopinent

  • Data de Nascimento 06/23/1971

Informações Pessoais

  • Sexo
    Masculino

Contato

  • Twitter
    @gustavopi
  1. gustavopinent

    Erro cURL unable to get local issuer certificate

    Ocorre que o erro retornado pelo curl é o mesmo após feita a alteração, e remete ao arquivo local, não ao certificado do CEP Aberto. Mas vou manter isso em mente, especialmente quando a requisição for mais "séria". Eu achava que o php estava encontrando o arquivo mas não conseguia processá-lo de fato. Então é culpa do CEP Aberto? Na minha humilde opinião, eles não deveriam deixar assim, não ajuda a tornar a Internet mais segura.
  2. gustavopinent

    Erro cURL unable to get local issuer certificate

    Sim, o que eu fiz foi desativar o SSL através das linhas citadas porque achei um preciosismo de segurança. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); O ViaCEP também é uma opção, acho que estava fora do ar na época e eu acabei usando o CEP Aberto. Porém, me preocupa o fato do CURL insistir em não carregar o arquivo. Podemos precisar em um projeto no futuro. Vou postar todo o código aqui, até como contribuição, não há tutorial em PHP no site CEP Aberto. O código permite fazer vários tipos de consulta a partir de um JavaScript e obter o retorno em JSON, mas também permite testes direto no navegador. <?php header('HTTP/1.1 200 OK'); header('Content-Type: text/plain; charset=utf-8'); define("ROOT", dirname(__FILE__)."/"); $api = (isset($_GET["api"]))? $_GET["api"] : FALSE ; // método: cep, nearest, address e cities $req = (isset($_GET["req"]))? $_GET["req"] : FALSE ; // dados em json $token = 'meusegredinho'; // token do CEP Aberto $cacert = ROOT.'cacert.pem'; // Certificados SSL // $Res = ["erro"=>"OK", "msg"=>"", "dados"=>[], "url"=>"", "http"=>0, "descr"=>""]; // if(is_file($cacert)) { if($api && $req) { $query = http_build_query(json_decode($req, TRUE)); $url = 'https://www.cepaberto.com/api/v3/'.$api.'?'.$query; $Res["url"] = $url; try { $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Token token="' . $token . '"']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //curl_setopt($ch, CURLOPT_CAINFO, $cacert); //curl_setopt($ch, CURLOPT_CAPATH, $cacert); $res = curl_exec($ch); if($res===FALSE) { $Res["erro"] = "curl"; $Res["msg"] = "Execução CURL falhou!"; $Res["descr"] = curl_error($ch); } else { $Res["dados"] = json_decode($res); $Res["http"] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $Res["erro"] = ($Res["http"]==200)? "OK" : "http" ; $Res["msg"] = ($Res["http"]==200)? "" : "Erro HTTP ".$Res["http"] ; } curl_close($ch); } catch(Exception $e) { $Res["erro"] = "?"; $Res["msg"] = "Erro desconhecido"; $Res["descr"] = $e; } } else { $Res["erro"] = "params"; $Res["msg"] .= (!$api)? "Parâmetro api não informado " : "" ; $Res["msg"] .= (!$req)? "Parâmetro req não informado " : "" ; } } else { $Res["erro"] = "cacert"; $Res["msg"] = "Arquivo de certificados SSL não encontrado."; $Res["descr"] = "Arquivo requerido não encontrado em '".$cacert."'."; } switch($_GET["teste"]){ case "txt": echo("url: ".$url."\nerro: ".$Res["erro"]."\nmsg: ".$Res["msg"]."\nhttp: ".$Res["http"]."\ndados: \n".json_encode($Res["dados"], JSON_PRETTY_PRINT)."\ndescr: \n".json_encode($Res["descr"], JSON_PRETTY_PRINT)); break; case "json": default: echo(json_encode($Res)); } ?> <?php header('HTTP/1.1 200 OK'); header('Content-Type: text/plain; charset=utf-8'); define("ROOT", dirname(__FILE__)."/"); $api = (isset($_GET["api"]))? $_GET["api"] : FALSE ; // método: cep, nearest, address e cities $req = (isset($_GET["req"]))? $_GET["req"] : FALSE ; // dados em json $token = 'c546794c1f405bf6e1b74aba4147cff1'; // token do CEP Aberto $cacert = ROOT.'cacert.pem'; // Certificados SSL // $Res = ["erro"=>"OK", "msg"=>"", "dados"=>[], "url"=>"", "http"=>0, "descr"=>""]; // if(is_file($cacert)) { if($api && $req) { $query = http_build_query(json_decode($req, TRUE)); $url = 'https://www.cepaberto.com/api/v3/'.$api.'?'.$query; $Res["url"] = $url; try { $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Token token="' . $token . '"']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //curl_setopt($ch, CURLOPT_CAINFO, $cacert); //curl_setopt($ch, CURLOPT_CAPATH, $cacert); $res = curl_exec($ch); if($res===FALSE) { $Res["erro"] = "curl"; $Res["msg"] = "Execução CURL falhou!"; $Res["descr"] = curl_error($ch); } else { $Res["dados"] = json_decode($res); $Res["http"] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $Res["erro"] = ($Res["http"]==200)? "OK" : "http" ; $Res["msg"] = ($Res["http"]==200)? "" : "Erro HTTP ".$Res["http"] ; } curl_close($ch); } catch(Exception $e) { $Res["erro"] = "?"; $Res["msg"] = "Erro desconhecido"; $Res["descr"] = $e; } } else { $Res["erro"] = "params"; $Res["msg"] .= (!$api)? "Parâmetro api não informado " : "" ; $Res["msg"] .= (!$req)? "Parâmetro req não informado " : "" ; } } else { $Res["erro"] = "cacert"; $Res["msg"] = "Arquivo de certificados SSL não encontrado."; $Res["descr"] = "Arquivo requerido não encontrado em '".$cacert."'."; } switch($_GET["teste"]){ case "txt": echo("url: ".$url."\nerro: ".$Res["erro"]."\nmsg: ".$Res["msg"]."\nhttp: ".$Res["http"]."\ndados: \n".json_encode($Res["dados"], JSON_PRETTY_PRINT)."\ndescr: \n".json_encode($Res["descr"], JSON_PRETTY_PRINT)); break; case "json": default: echo(json_encode($Res)); } ?>
  3. gustavopinent

    Erro cURL unable to get local issuer certificate

    Essa é a url: https://www.cepaberto.com/api/v3/cep?cep=95020520, mas tem que passar o token no header. De qualquer forma, o erro é local, vai dar erro em qualquer url com ssl.
  4. gustavopinent

    Erro cURL unable to get local issuer certificate

    Olá! Esse erro ocorre em um php simples rodando em um servidor compartilhado Locaweb: SSL certificate problem: unable to get local issuer certificate. O php faz uma requisição ao site do Cep Aberto para consulta de endereço informando o CEP (https://www.cepaberto.com/api/v3/cep?cep=95020520) Olhei o php.ini e não tem nenhuma menção ao arquivo de certificados. Então peguei alguns tutoriais, baixei o arquivo "cacert.pem", coloquei lá e defini o curl no próprio php, ficou assim: $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Token token="' . $token . '"']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_CAINFO, $cacert); curl_setopt($ch, CURLOPT_CAPATH, $cacert); $res = curl_exec($ch); if($res===FALSE) { $Res["erro"] = "curl"; $Res["msg"] = "Execução CURL falhou!"; $Res["descr"] = curl_error($ch); } else { $Res["dados"] = json_decode($res); $Res["http"] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $Res["erro"] = ($Res["http"]==200)? "OK" : "http" ; $Res["msg"] = ($Res["http"]==200)? "" : "Erro HTTP ".$Res["http"] ; } Onde $cacert é o endereço do arquivo "cacert.pem", verificado antes por is_file. Mas o erro é o mesmo, como se eu nada tivesse feito. Tem que configura o Apache? Não sei como configurar o Apache, será que posso? Desabilitar o SSL do php é uma opção que não tentei ainda, dizem que não é aconselhável... O PHP é o 5.6 (pretendo ir pro 7.4 em breve) e o servidor é CENTOS 5.11 compartilhado, hospedagem Locaweb. Alguma ideia?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.