2011-12-30 19 views
5

प्राप्त करने के लिए रीडायरेक्ट का पालन करें मैंने निम्न PHP फ़ंक्शन को वेबपृष्ठ के HTTP कोड में बनाया है।PHP कर्ल HTTP स्थिति

function get_link_status($url, $timeout = 10) 
{ 
    $ch = curl_init(); 

    // set cURL options 
    $opts = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser 
       CURLOPT_URL => $url,   // set URL 
       CURLOPT_NOBODY => true,   // do a HEAD request only 
       CURLOPT_TIMEOUT => $timeout); // set timeout 
    curl_setopt_array($ch, $opts); 

    curl_exec($ch); // do it! 

    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); // find HTTP status 

    curl_close($ch); // close handle 

    return $status; 
} 

मैं इस समारोह 301 & 302 रीडायरेक्ट (संभावना कई बार रीडायरेक्ट) का पालन करें और अंतिम HTTP स्थिति कोड प्राप्त करने के लिए संशोधित कर सकते हैं कैसे?

+0

संभावित डुप्लिकेट [कर्ल रीडायरेक्ट का पालन करें?] (Http://stackoverflow.com/questions/3519939/make-curl-follow-redirects) –

उत्तर

17

CURLOPT_FOLLOWLOCATIONTRUE पर सेट करें।

$opts = array(CURLOPT_RETURNTRANSFER => true, // do not output to browser 
       CURLOPT_URL => $url,   // set URL 
       CURLOPT_NOBODY => true,   // do a HEAD request only 
       CURLOPT_FOLLOWLOCATION => true // follow location headers 
       CURLOPT_TIMEOUT => $timeout); // set timeout 

आप कर्ल करने के लिए बाध्य नहीं कर रहे हैं, तो आप के रूप में अच्छी (यहां तक ​​कि आंतरिक रूप से तो कर्ल किया जा सकता है जो) मानक PHP http रैपर के साथ ऐसा कर सकते हैं। उदाहरण कोड:

$url = 'http://example.com/'; 
$code = FALSE; 

$options['http'] = array(
    'method' => "HEAD" 
); 

$context = stream_context_create($options); 

$body = file_get_contents($url, NULL, $context); 

foreach($http_response_header as $header) 
{ 
    sscanf($header, 'HTTP/%*d.%*d %d', $code); 
} 

echo "Status code (after all redirects): $code<br>\n"; 

साथ ही HEAD first with PHP Streams देखें।

एक संबंधित प्रश्न How can one check to see if a remote file exists using PHP? है।

+0

शानदार उत्तर। मेरे मामले में मुझे अंतिम स्थान की आवश्यकता थी, इसलिए 'sscanf ($ हेडर,' स्थान:% s ', $ loc) कर रहा है;' चाल चल रही थी। धन्यवाद! – noinput

संबंधित मुद्दे