2016-05-04 15 views
0

Wir haben einen Crawler in PHP gebaut, um wichtige Informationen von unseren Kundenseiten zu ziehen. Das Problem ist, dass die meisten unserer Kunden benutzerdefinierte verkürzte Links veröffentlichen, die eine 302 verwenden, um zum endgültigen Ziel zu gelangen. Unser Crawler hat diese bis zum letzten Client erfolgreich verfolgt (siehe unten stehenden Code). Hier ist ein Beispiel Link:PHP cURL Anfrage nicht folgenden Redirects

http://www.dose.com/lists/26235/s

Wenn Sie gehen dort in einem Browser, müssen Sie den Standard 302 Verhalten sehen, aber wenn Sie es mit einem Crawler besuchen, gibt es einfach eine 200 und nicht umleiten . Dies ließ mich glauben, dass ich die Anfrage so "natürlich" wie möglich aussehen lassen musste, aber ich hatte immer noch keinen Erfolg. Schließlich ist hier der cURL-Bereich unseres Code:

function sendRequest($url) 
{ 
    global $ch; 
    $user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)". 
       " Gecko/20041107 Firefox/1.0"; 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
     'Accept-Language: en-US,en;q=0.8', 
     'Connection: keep-alive' 
    )); 
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_ENCODING, ''); 

    $contents = curl_exec($ch); 
    //curl_close($ch); 

    return $contents; 
} 

Edited den Rat von unten zu schließen, auch wenn das Problem weiterhin besteht.

+1

http://www.dose.com/lists/26235/s - gibt '301 Moved permanent' –

+0

Sie richtig sind. Danke für diese Korrektur. Immer noch nicht ganz sicher warum cURL es so schwer hat. –

Antwort

1

Wenn Sie nicht bereits sind, müssen Sie manuell die Antwort dieser Funktion gzdecode()

Ein noch besserer Weg aufblasen müssen möglicherweise Locken zu sagen, die Kompression selbst zu behandeln, anstatt manuell angeben. Versuchen Sie, die Accept-Encoding-Header-Zeile Entfernen und Hinzufügen von:

curl_setopt($ch, CURLOPT_ENCODING, ''); 
+0

Danke für diesen Tipp. Die Header sind eine neue Ergänzung in dem Versuch, dieses Problem zu beheben, also habe ich nicht darüber nachgedacht. Leider bleibt das Problem bestehen. –