Мне нужен PHP-скрипт, который читает код ответа HTTP для каждого запроса URL-адреса.
что-то вроде
$headers = get_headers($theURL); return substr($headers[0], 9, 3);
Проблема заключается в том, что функция get_headers () отключена на уровне сервера, как политика. Так что это не работает.
Вопрос в том, как получить код ответа HTTP для URL?
Если cURL включен, вы можете использовать его для получения всего заголовка или всего лишь кода ответа. Следующий код присваивает код $response_code
переменной $response_code
:
$curl = curl_init(); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => 'http://stackoverflow.com' ) ); curl_exec( $curl ); $response_code = curl_getinfo( $curl, CURLINFO_HTTP_CODE ); curl_close( $curl );
Чтобы получить весь заголовок, вы можете отправить запрос HEAD, например:
$curl = curl_init(); curl_setopt_array( $curl, array( CURLOPT_HEADER => true, CURLOPT_NOBODY => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => 'http://stackoverflow.com' ) ); $headers = explode( "\n", curl_exec( $curl ) ); curl_close( $curl );
Используйте HttpRequest, если вы можете: http://de2.php.net/manual/en/class.httprequest.php
$request = new HttpRequest("http://www.example.com/"); $request->send(); echo $request->getResponseCode();
Или сделать это сложно: http://de2.php.net/manual/en/function.fsockopen.php
$errno = 0; $errstr = ""; $res = fsockopen('www.example.com', 80, $errno, $errstr); $request = "GET / HTTP/1.1\r\n"; $request .= "Host: www.example.com\r\n"; $request .= "Connection: Close\r\n\r\n"; fwrite($res, $request); $head = ""; while(!feof($res)) { $head .= fgets($res); } $firstLine = reset(explode("\n", $head)); $matches = array(); preg_match("/[0-9]{3}/", $firstLine, $matches); var_dump($matches[0]);
Curl также может быть хорошим вариантом, но лучший вариант – победить вашего администратора;)
Вы можете создавать и читать свои собственные HTTP-запросы с помощью fsockopen и регулярных операций с файлами. Ознакомьтесь с моим предыдущим ответом на эту тему:
Существуют ли другие варианты для клиентов отдыха помимо CURL?