Intereting Posts

PHP CURL следует перенаправить, чтобы получить статус 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?

установите для параметра CURLOPT_FOLLOWLOCATION значение TRUE .

 $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 сначала с PHP Streams .

Связанный вопрос: как проверить, существует ли удаленный файл с помощью PHP? ,