2016-05-23 4 views
0

Ich versuche, Daten von einer Seite zu kratzen und versuchen, CURL in PHP zu verwenden.PHP Curl Verbindung zu Seite und warten auf Umleitung

Das Problem ist, dass die Seite manchmal unter hoher Last ist und mir eine Nachricht von "Nur einen Moment ... Ihre Anfrage wird verarbeitet ..." und hat eine Meta-Aktualisierung alle 5 Sekunden, bis der Server verfügbar ist . Dies könnte mehrere Aktualisierungen sein.

Ich habe versucht,

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

Zugabe dies nicht hilft, da es mehrmals aktualisiert.

Gibt es eine Möglichkeit, es zu warten, bis es keine Aktualisierung mehr gibt oder zu bestätigen, dass es die nächste Seite irgendwie erreicht hat?

die curl Skript ist curently

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    $data = curl_exec($ch); 
    curl_close($ch); 

jede Hilfe sehr geschätzt wird. Wenn dies nicht mit Curl getan werden kann, würden Sie eine andere Methode vorschlagen?

+0

Bitte posten Sie die Meta-Aktualisierung. –

+0

Dies kann nur durch Wiederholen der Anfrage erfolgen. Stellen Sie sicher, dass der Dienst, mit dem Sie verbunden sind, Ihren wiederholten Anfragen zustimmt. Du trägst immerhin zur schweren Last bei – sba

+0

ja erlauben sie das Kratzen. – md123

Antwort

0

können Sie versuchen, so etwas wie:

<?php 
    $data= "" ; 
    $retries = 0; 
    while(preg_match('/<meta http-equiv="refresh"/im', $data) or $retries < 5){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     if(!preg_match('/<meta http-equiv="refresh"/im', $data)) 
     { 
      break; 
     } 
     $retries++; 
     sleep(2); 
    } 
?> 

Die oben wird versuchen, die html für 5-mal zu analysieren und Sekunden zwischen Wiederholungen warten, util der html enthält keine <meta http-equiv="refresh

+0

Dies wird nur erneut Anfragen. Hinzufügen zur Serverlast. Ich möchte, dass es auf der einzelnen Verbindung bleibt. – md123

+0

Sie können das nicht tun. –

Verwandte Themen