2017-12-07 1 views
0

Ich möchte etwas fragen, mich verwirren lassen. Ich bin CURL mit HTML-Code aus diesem Link zu erhaltenPHP CURL manchmal leer leer

echo set_user_agent_grab("https://www.bandros.co.id/produk/dress-atasan-baju-rajut-wanita-sad-500"); 

Und das ist meine Funktion

function set_user_agent_grab($link){ 
    $headers = ["text/html; charset=UTF-8"]; 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, $link); 
      curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2'); 
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
      curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
      curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); 
      $result = curl_exec($ch); 
      curl_close($ch); 
      return $result; 
    } 

Das Problem, manchmal bekam ich Rückkehr leer, ich weiß nicht, das ist aus meiner Server oder von der Website Schutz mit ich weiß es nicht, bitte sagen Sie mir, danke.

+0

Ich frage mich, wie das überhaupt laufen würde, denn '$ ch' – Jeff

+0

leider i'am vergessen nicht definiert ist, ich von meiner Funktion bearbeiten waren ch = curl_init add $(); –

+2

'var_dump (curl_getinfo ($ ch))', 'var_dump (curl_errno ($ ch))' und 'var_dump (curl_error ($ ch))' nach dem Aufruf von 'curl_exec()' kann Ihnen im Moment einige Einblicke geben Sie sehen keine Antwortstatusinformationen an, nur den Körper. – Scuzzy

Antwort

0

CURLOPT_VERBOSE sollte enthüllen, was passiert ist. Überprüfen Sie einfach, ob curl_exec fehlschlägt, und wenn dies der Fall ist, werfen Sie eine RuntimeException ab und überprüfen Sie beim nächsten Mal Ihre PHP-Fehlerprotokolle. Zusätzlich können Sie überprüfen, was curl_errno() und curl_error sagt.

function set_user_agent_grab($link) { 
    $headers = [ 
      "text/html; charset=UTF-8" 
    ]; 
    $ch = curl_init(); 
    $debugfileh = tmpfile(); 
    $debugfile = stream_get_meta_data ($debugfileh) ['uri']; 
    try { 
     curl_setopt ($ch, CURLOPT_VERBOSE, 1); 
     curl_setopt ($ch, CURLOPT_STDERR, $debugfileh); 

     curl_setopt ($ch, CURLOPT_URL, $link); 
     curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2'); 
     curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt ($ch, CURLOPT_MAXREDIRS, 10); 
     curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30); 
     curl_setopt ($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
     curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); 
     curl_setopt ($ch, CURLOPT_ENCODING, 'gzip'); 
     $result = curl_exec ($ch); 
     if (! is_string ($result)) { 
      $errstr = "curl_exec failed: " . curl_errno ($ch) . ": " . curl_error ($ch) . ". debuginfo: " . file_get_contents ($debugfile); 
      throw new RuntimeException ($errstr); 
     } 
     return $result; 
    } finally{ 
     fclose ($debugfileh); 
     curl_close ($ch); 
    } 
} 
+0

Vielen Dank, bevor Herr @hanshenrik, sehe ich keinen Fehler in der Datei error_log und beeinflusst es möglicherweise die Cookies der Website? wenn von Cookies, wie man es benutzt? –

+0

@CSMMedia libcurl verwendet standardmäßig keine Cookies. Jedes Mal, wenn dieser Code ausgeführt wird, wird er ohne Cookies neu gestartet. aber ist deine Fehlerprotokollierung dann kaputt? Sie sollten Ihre Fehlerprotokollierung vor dem weiteren Debuggen beheben. Führen Sie als einfachen Testfall '' '' '' php \ 'new \ Exception \' ('error log test'); '' '' aus und sehen Sie, ob Sie in Ihren Fehlerprotokollen 'error log test 'finden können. – hanshenrik

+0

ok, vielen Dank für die Hilfe, aber iam sehr curios sogar ich benutze Cronjob Skript alle 5 Minuten zu laufen und ich bekomme Fehler in error_log, können wir diskutieren privat, so kann ich meinen ganzen Code zu Ihnen teilen, ich schätze wirklich, wenn Sie Kann mir bitte helfen. –