2009-11-06 35 views
5

Tôi đang sử dụng curl để làm cho php gửi một yêu cầu http đến một số trang web ở đâu đó và đã đặt CURLOPT_FOLLOWLOCATION thành 1 để nó theo sau chuyển hướng. Làm thế nào sau đó, tôi có thể tìm ra nơi mà nó cuối cùng đã được chuyển hướng?Tìm ra nơi curl được chuyển hướng

Trả lời

6

Bạn có thể làm một cái gì đó như:

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

Tốt. Không biết về điều này. Xem xét số lượng tùy chọn curl, không phải lúc nào cũng dễ dàng tìm thấy chúng. Cảm ơn. –

-1

Nếu bạn không cần cơ thể cuối cùng bạn có thể làm theo cách này:

Set CURLOPT_HEADERCURLOPT_NOBODY. Tiêu đề "Vị trí" phải được trả lại và sẽ chứa url mới. Sau đó thực hiện yêu cầu với url mới nếu cần.

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']; 

này sẽ cho bạn thấy URL mà bạn đã được chuyển hướng đến cuối cùng.

0

kiểm tra đoạn mã này. Nó hoạt động tốt cho tôi:

$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>"; 
} 
Các vấn đề liên quan