Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
fercpbsb1

como fazer requisição curl esperar a pagina de destino carregar?

Pergunta

Olá pessoal,

 

estou tentando fazer um programa para capturar o valor de um produto que está em outra página.

Estou usando o cURL em PHP.

Consigo pegar o código da outra página corretamente, mas o que é retornado é a tela de "Aguarde enquanto buscamos o melhor valor".

Essa página de "aguarde" está no site alvo e é um script executado em uma tread, enquanto o sistema faz a varredura em banco de dados.

 

Estou percebendo que a requisição cURL não aguarda que a página alvo seja completamente carregada para só então pegar o código HTML final.

 

Como faço para ele aguardar todo o carregamento da página destino?

 

Estou usando o seguinte código:

 

$link = "http://www.megaroteiros.com.br"; //link de exemplo
    
    $cURL = curl_init($link);
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
    // Seguir qualquer redirecionamento que houver na URL    
    curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($cURL, CURLOPT_AUTOREFERER, 1);    
    curl_setopt ($cURL, CURLOPT_HEADER, 1);
    curl_setopt($cURL, CURLOPT_MAXREDIRS, 10);
    curl_setopt ($cURL, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt ($cURL, CURLOPT_TIMEOUT, 15);
    $userAgent = $_SERVER['HTTP_USER_AGENT']; 
    curl_setopt($cURL, CURLOPT_USERAGENT, $userAgent );
    
    $url = curl_exec($cURL);
    // Pega o código de resposta HTTP
    $resposta = curl_getinfo($cURL, CURLINFO_HTTP_CODE);
    curl_close($cURL);
      if ($resposta == '404') {
        echo 'O site está fora do ar (ERRO 404)!';
      } else {
        //$url = file_get_contents($link);
    	echo "<textarea cols='130' rows='50' wrap='OFF'>";
     	$variavel_x = $url;
     	echo htmlentities(utf8_decode($variavel_x));
    	echo "</textarea>";
      }
    
    
    

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 resposta a esta questão

Recommended Posts

12 horas atrás, Rapadura disse:

 

Rapadura, obrigado pela resposta.

Não sei se você reparou, mas fui eu quem fiz o último comentário no link que você me indicou.

Gostaria de saber se aquela indicação havia solucionado o problema.

 

No entanto, digo que para mim seria muito complicado instalar aquele Servidor Selenium pois utilizo hospedagem de terceiros.

No servidor, sei que o cURL funciona sem problemas por isso estou buscando algo que ajude a esperar o carregamento total da página, ou seja, após a execução da tread que roda antes do resultado final da pesquisa na página destino.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • 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.