2009-11-06 18 views
5

मैं PHP को कुछ वेबसाइट पर http अनुरोध भेजने के लिए कर्ल का उपयोग कर रहा हूं और CURLOPT_FOLLOWLOCATION को 1 पर सेट कर दिया है ताकि यह रीडायरेक्ट का पालन कर सके। फिर, क्या मैं यह पता लगा सकता हूं कि इसे अंततः पुनर्निर्देशित किया गया था?यह पता लगाना कि कर्ल को रीडायरेक्ट किया गया था

उत्तर

6

आप की तरह कुछ कर सकते हैं।

+0

अच्छा। इस बारे में नहीं पता था। कर्ल विकल्पों की संख्या को ध्यान में रखते हुए, उन्हें ढूंढना हमेशा आसान नहीं होता है। धन्यवाद। –

-1

आप अंतिम शरीर की जरूरत नहीं है, तो आप इसे इस तरह से कर सकते हैं:

सेट CURLOPT_HEADER और CURLOPT_NOBODY। शीर्षलेख "स्थान" वापस किया जाना चाहिए और इसमें नया यूआरएल होगा। फिर यदि आवश्यक हो तो नए यूआरएल के साथ अनुरोध करें।

curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // returns the last effective 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']; 

यह आपको यूआरएल है कि आप अंततः पर पुनः निर्देशित कर रहे थे दिखाएगा:

0

कोड के इस स्निपेट का परीक्षण करें। यह मेरे लिए ठीक काम करता है:

$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>"; 
} 
संबंधित मुद्दे