2009-11-06 15 views
5

Używam curl, aby php wysłał żądanie http do jakiegoś serwisu gdzieś i ustawiłem CURLOPT_FOLLOWLOCATION na 1, tak aby następowało przekierowania. Jak więc mogę się dowiedzieć, gdzie ostatecznie został przekierowany?Sprawdzanie, gdzie curl został przekierowany

Odpowiedz

6

można zrobić coś takiego:

curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // returns the last effective URL 
+0

Nice. Nie wiedziałem o tym. Biorąc pod uwagę liczbę opcji zwijania, nie zawsze jest łatwo je znaleźć. Dzięki. –

-1

Jeśli nie potrzebujemy ostatecznej ciało można to zrobić w ten sposób:

Set CURLOPT_HEADER i CURLOPT_NOBODY. Nagłówek "Lokalizacja" powinien zostać zwrócony i zawierać nowy adres URL. Następnie w razie potrzeby wykonaj żądanie z nowym adresem URL.

2
$ch = curl_init("http://websitethatredirects.com"); 
$curlParams = array(
    CURLOPT_FOLLOWLOCATION => true, 
); 
curl_setopt_array($ch, $curlParams); 
$ret = curl_exec($ch); 
$info = curl_getinfo($ch); 
print $info['url']; 

To pokaże Ci URL, które zostały ostatecznie przekierowany.

0

przetestuj te fragmenty kodu. Działa to dobrze dla mnie:

$urls = array(
    'http://www.apple.com/imac', 
    'http://www.google.com/' 
); 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

foreach($urls as $url) { 
    curl_setopt($ch, CURLOPT_URL, $url); 
    $out = curl_exec($ch); 

    // line endings is the wonkiest piece of this whole thing 
    $out = str_replace("\r", "", $out); 

    // only look at the headers 
    $headers_end = strpos($out, "\n\n"); 
    if($headers_end !== false) { 
     $out = substr($out, 0, $headers_end); 
    } 

    $headers = explode("\n", $out); 
    foreach($headers as $header) { 
     if(substr($header, 0, 10) == "Location: ") { 
      $target = substr($header, 10); 

      echo "[$url] redirects to [$target]<br>"; 
      continue 2; 
     } 
    } 

    echo "[$url] does not redirect<br>"; 
} 
Powiązane problemy