2017-03-17 1 views
1

Ich benutze eine API, um eine URL zurückgeben, alle URLs haben Weiterleitungen, aber wie viele Weiterleitungen und wo die URLs gehen sind unbekannt.Wie alle Weiterleitungen mit CURL einschließlich META-Refresh zu verfolgen

Also was ich versuche zu tun ist, den Pfad zu verfolgen und die letzte URL zu finden.

Ich möchte im Grunde das gleiche tun wie: http://wheregoes.com/retracer.php, aber ich brauche nur die letzte URL kennen

Ich habe einen Weg gefunden, es mit Curl zu tun, aber die Spur stoppt, wenn es sich um eine Meta-Refresh ist.

Ich habe diesen Thread gesehen: PHP: Can CURL follow meta redirects, aber es hilft mir nicht viel.

Dies ist mein aktueller Code:

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

    $lasturl = trace_url('http://myurl.org'); 

    echo $lasturl; 
+1

Sie müssen ein Skript schreiben, das der Meta-Weiterleitung folgt. Die von Ihnen angegebene URL weist Sie in die richtige Richtung. Für jede Meta-Aktualisierung müssen Sie eine neue Curl-Anforderung erstellen. – Scriptman

+0

Ja, das habe ich mir schon gedacht. Ich brauche etwas Hilfe mit dem Skript für die Handhabung der Meta-Aktualisierungen. – StaalCtrl

+0

Wie hilft die Frage [PHP: Kann CURL Meta-Weiterleitungen folgen] (http://stackoverflow.com/questions/1820705/php-can-curl-follow-meta-redirects) nicht? Wie hast du es benutzt? – hassan

Antwort

0

gut, es gibt einen großen Unterschied zwischen Header Redirects, die im Wesentlichen unter 3xx Klasse und Meta-Refresh ist, einfach eine Art und Weise verläßt sich auf dem Server, und der andere im Zusammenhang mit der Kunde .

und so lange wie curl oder wie bekannt cURL oder libcurl, die auf dem Server ausgeführt wird, kann es den ersten Typ, "Header Redirects" oder HTTP-Weiterleitungen behandeln.

so können Sie die URL dann mit vielen Möglichkeiten extrahieren.

müssen Sie es manuell behandeln.

1) Verschrotten Sie den Inhalt der Webseite.

2) extrahieren Sie den Link aus dem Meta-Tag.

3) schnappen Sie sich diesen neuen Link, wenn Sie möchten.


aus Ihrem Beispiel:

function trace_url($url){ 
    $ch = curl_init($url); 
    curl_setopt_array($ch, array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
    )); 

    curl_exec($ch); 
    $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
    curl_close($ch); 

    return $url; 
} 

$response = trace_url('http://myurl.org'); 

// quick pattern for explanation purposes only, you may improve it as you like 
preg_match('#\<meta.*?content="[0-9]*\;url=([^"]+)"\s*\/\>#', $response, $links); 

$newLink = $links[1]; 

oder wie in Ihrer Frage nach der Lösung erwähnt vorgesehen, die simplexml_load_file Bibliothek verwenden.

$xml = simplexml_load_file($response); 
$link = $xml->xpath("//meta[@http-equiv='refresh']"); 
Verwandte Themen