Ir para conteúdo
Francisco455

Curl não coleta dados externos

Recommended Posts

Tenho uma requisição curl que não coelta os dados da url que preciso isso é problema da minha hospedagem? do servidor deles? ou algo errado no código abaixo:

$ch = curl_init();

$chamada = 'http://www.google.nl/'; // FUNCIONA
$chamada = 'https://sandbox.clicksign.com'; // NÃO FUNCIONA RETORNA VAZIO

// informar URL e outras funções ao CURL
curl_setopt($ch, CURLOPT_URL, $chamada);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Acessar a URL e retornar a saída
$output = curl_exec($ch);

// liberar
curl_close($ch);

// Imprimir a saída
echo $output;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende de muitas coisas...

 

mas pra ter detalhado se o curl apresenta algum erro você pode usar curl_error($ch) condicionado ao funcionamento do exec, por exemplo:

$output = curl_exec($ch);
if(!$output) {
	echo curl_error($ch);
}

Dessa forma você tem o retorno caso o o exec apresente algum problema.

Alem do mais, ,precisa ver se a url requisitada tem permissão de ser requisitada dessa forma.
Se você quer simplesmente fazer um get (pegar dados sem enviar body) você poderia simplificar com file_get_contents()

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 09/08/2021 at 22:57, Guilherme Luiz disse:

Depende de muitas coisas...

 

mas pra ter detalhado se o curl apresenta algum erro você pode usar curl_error($ch) condicionado ao funcionamento do exec, por exemplo:


$output = curl_exec($ch);
if(!$output) {
	echo curl_error($ch);
}

Dessa forma você tem o retorno caso o o exec apresente algum problema.

Alem do mais, ,precisa ver se a url requisitada tem permissão de ser requisitada dessa forma.
Se você quer simplesmente fazer um get (pegar dados sem enviar body) você poderia simplificar com file_get_contents()

 

Obrigado pela dica, eu não vou testar o file_gets porque no futuro vou precisar enviar body sim, mas código de exibir erro mostrou o que acontece:

 

Citar

Error: error setting certificate verify locations:
CAfile: C:\Program Files (x86)\Parallels\Plesk\Additional\PHPSettings\cacert.pem
CApath: none

 

Só não entendi o que significa estou tentando em contato com o suporte do site, mas se alguém souber do que se tratar fico agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera eu vim aqui só pra dar a notícia de que consegui fazer a requisição e vou compartilhar caso alguém precise:

Era basicamente um option na curl, como abaixo:

 

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
        $resultado = json_decode(curl_exec($ch));

Ainda não testei com o devido POST mas já é um avanço conseguir com o get.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por gustavopinent
      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? 
    • Por Wyrv
      Boa tarde pessoal, 

      Sou meio novo em programação web.
      Estou com o seguinte problema, qualquer ajuda será bem vinda.

      Em PHP, etou montando uma URL pra ser acessada com o comando Curl. 
      Tudo está funcionando, consigo executar e receber o retorno da URL no meu script.

      Porém o retorno parece vir em html, e a resposta que eu quero estar está no meio de tudo.
       
      <form name="IntegracaoForm" method="post" action="/integracao.do;jsessionid=C221B55C9AF93E1A94403FAA52943FB0" enctype="multipart/form-data" id="IntegracaoForm"> <table > <tbody> <tr> <td> 000 </td> </tr> </tbody> </table> </form><br>FIM<br>-> <br /> O código de retorno vem onde está o 000.
      No caso eu preciso validar esse retorno, mas eu não estou conseguindo uma forma de jogar esse valor pra uma variável pra realizar um if.

      Alguém pode me dar alguma ideia?

      Agradeço desde já.
       
    • Por arlindophp
      <?php
       
      function doPut($url, $fields)
      {
          $fields = (is_array($fields)) ? http_build_query($fields) : $fields;
       
          if ($ch = curl_init($url)) {
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
              curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
              curl_exec($ch);
              //$resp = curl_exec($ch);
       
              $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       
              curl_close($ch);
       
              return (int) $status;
          } else {
              return false;
          }
      }
       
      session_start();
      $s_chave = $_POST['edtChave'];
      $_SESSION['s_chave'] = $s_chave;
      $edtChave = $_POST['edtChave'];
       
      $edtCultura = $_POST['edtCultura'];
      $edtPraga = $_POST['edtPraga'];
      $edtDose = $_POST['edtDose'];
      $edtEspecificacao = $_POST['edtEspecificacao'];
      $edtAplicaTerrestre = $_POST['edtAplicaTerrestre'];
      $edtAplicarea = $_POST['edtAplicarea'];
      $edtIntseg = $_POST['edtIntseg'];
      $edtIntEntrada = $_POST['edtIntEntrada'];
      $edtDadosGerais = $_POST['edtDadosGerais'];
       
      $url = "www.api.site.com";
      echo 'Url = ' . $url;
      echo '<br>';
       
          $data_array2 = array();
          for ($i = 0; $i < 5; $i++) {
              $montagem_array = array(
                  'cultura' => $_POST['edtCultura'],
                  'praga' => $_POST['edtPraga'],
                  'dose' => $_POST['edtDose'],
                  'especificacao' => $_POST['edtEspecificacao'],
                  'aplicaterrestre' => $_POST['edtAplicaTerrestre'],
                  'aplicaerea' => $_POST['edtAplicarea'],
                  'intseg' => $_POST['edtIntseg'],
                  'intentrada' => $_POST['edtIntEntrada'],
                  'dadosgerais' => $_POST['edtDadosGerais'],
              );
       
              $data_array2[$i] = $montagem_array;
          }
       
          //$json = json_encode($data_array2);
       
      echo '<br>';
      echo 'Array convertido para formato json: ' . json_encode($data_array2);
      echo '<br>';
      //$data = $array_para_string;
      //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';
       
      $header = array(
          'Authorization: falkdsjçlaskf'
       
      );
       
      //Nova tentativa 07/01/2022
      if (doPut($url, $data_array2) == 200) {
       
          echo 'Passou!';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      // do something
      else {
          echo 'Não deu certo';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      //Nova tentativa
       
      //header('location:jsonpostprodutobula_teste.php');
    • Por arlindophp
      <?php
       
      function doPut($url, $fields)
      {
          $fields = (is_array($fields)) ? http_build_query($fields) : $fields;
       
          if ($ch = curl_init($url)) {
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
              curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
              curl_exec($ch);
              //$resp = curl_exec($ch);
       
              $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       
              curl_close($ch);
       
              return (int) $status;
          } else {
              return false;
          }
      }
       
      session_start();
      $s_chave = $_POST['edtChave'];
      $_SESSION['s_chave'] = $s_chave;
      $edtChave = $_POST['edtChave'];
       
      $edtCultura = $_POST['edtCultura'];
      $edtPraga = $_POST['edtPraga'];
      $edtDose = $_POST['edtDose'];
      $edtEspecificacao = $_POST['edtEspecificacao'];
      $edtAplicaTerrestre = $_POST['edtAplicaTerrestre'];
      $edtAplicarea = $_POST['edtAplicarea'];
      $edtIntseg = $_POST['edtIntseg'];
      $edtIntEntrada = $_POST['edtIntEntrada'];
      $edtDadosGerais = $_POST['edtDadosGerais'];
       
      $url = "www.api.site.com";
      echo 'Url = ' . $url;
      echo '<br>';
       
          $data_array2 = array();
          for ($i = 0; $i < 5; $i++) {
              $montagem_array = array(
                  'cultura' => $_POST['edtCultura'],
                  'praga' => $_POST['edtPraga'],
                  'dose' => $_POST['edtDose'],
                  'especificacao' => $_POST['edtEspecificacao'],
                  'aplicaterrestre' => $_POST['edtAplicaTerrestre'],
                  'aplicaerea' => $_POST['edtAplicarea'],
                  'intseg' => $_POST['edtIntseg'],
                  'intentrada' => $_POST['edtIntEntrada'],
                  'dadosgerais' => $_POST['edtDadosGerais'],
              );
       
              $data_array2[$i] = $montagem_array;
          }
       
          //$json = json_encode($data_array2);
       
      echo '<br>';
      echo 'Array convertido para formato json: ' . json_encode($data_array2);
      echo '<br>';
      //$data = $array_para_string;
      //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';
       
      $header = array(
          'Authorization: falkdsjçlaskf'
       
      );
       
      //Nova tentativa 07/01/2022
      if (doPut($url, $data_array2) == 200) {
       
          echo 'Passou!';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      // do something
      else {
          echo 'Não deu certo';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      //Nova tentativa
       
      //header('location:jsonpostprodutobula_teste.php');
    • Por arlindophp
      Pessoal estou tentando realizar um put com um json utilizando a biblioteca curl, mas só consigo fazer um por vez. Existe alguma forma de fazer isso usando a biblioteca Curl do php? Segue o código fonte funcionando, mas o curl não está aceitando um array multidimensional.
      *****************************
      <?php   function doPut($url, $fields) {     $fields = (is_array($fields)) ? http_build_query($fields) : $fields;       if ($ch = curl_init($url)) {         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));         curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);         curl_exec($ch);         //$resp = curl_exec($ch);           $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);           curl_close($ch);           return (int) $status;     } else {         return false;     } }   session_start(); $s_chave = $_POST['edtChave']; $_SESSION['s_chave'] = $s_chave; $edtChave = $_POST['edtChave'];   $edtCultura = $_POST['edtCultura']; $edtPraga = $_POST['edtPraga']; $edtDose = $_POST['edtDose']; $edtEspecificacao = $_POST['edtEspecificacao']; $edtAplicaTerrestre = $_POST['edtAplicaTerrestre']; $edtAplicarea = $_POST['edtAplicarea']; $edtIntseg = $_POST['edtIntseg']; $edtIntEntrada = $_POST['edtIntEntrada']; $edtDadosGerais = $_POST['edtDadosGerais'];   $url = "www.api.site.com"; echo 'Url = ' . $url; echo '<br>';       $data_array2 = array();     for ($i = 0; $i < 5; $i++) {         $montagem_array = array(             'cultura' => $_POST['edtCultura'],             'praga' => $_POST['edtPraga'],             'dose' => $_POST['edtDose'],             'especificacao' => $_POST['edtEspecificacao'],             'aplicaterrestre' => $_POST['edtAplicaTerrestre'],             'aplicaerea' => $_POST['edtAplicarea'],             'intseg' => $_POST['edtIntseg'],             'intentrada' => $_POST['edtIntEntrada'],             'dadosgerais' => $_POST['edtDadosGerais'],         );           $data_array2[$i] = $montagem_array;     }       //$json = json_encode($data_array2);   echo '<br>'; echo 'Array convertido para formato json: ' . json_encode($data_array2); echo '<br>'; //$data = $array_para_string; //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';   $header = array(     'Authorization: falkdsjçlaskf'   );   //Nova tentativa 07/01/2022 if (doPut($url, $data_array2) == 200) {       echo 'Passou!';     echo '<br>';     echo json_encode($data_array2);     echo '<br>'; } // do something else {     echo 'Não deu certo';     echo '<br>';     echo json_encode($data_array2);     echo '<br>'; } //Nova tentativa   //header('location:jsonpostprodutobula_teste.php');
×

Informação importante

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