Как анализировать заголовки в PHP - PullRequest
1 голос
/ 04 февраля 2011

Я использую file_get_contents для взаимодействия с API для простых GET запросов ... однако иногда он выдает заголовки, означающие, что произошла ошибка. Как я могу получить эти заголовки и определить, есть ли проблема?

Ответы [ 3 ]

5 голосов
/ 04 февраля 2011

Php установит $ http_response_header после file_get_contents, который содержит заголовки ответа в виде массива строк / строк заголовка. Нет необходимости использовать curl, если все, что вам нужно, это ответы заголовков (и, вероятно, не должны, некоторые стеки LAMP все еще не имеют cURL).

Документ для $ http_response_header: http://php.net/manual/en/reserved.variables.httpresponseheader.php

Пример:

file_get_contents('http://stacksocks.com');

foreach ($http_response_header as $header)
{
    echo $header . "<br>\n";
}

Советы взяты из поста в комментариях:

1) Значение меняется с каждым запросом сделал.

2) При использовании в методах / функциях текущее значение должно быть передано Метод / функция. С помощью $ http_response_header прямо в метод / функция без назначения значение по параметру функции / метода приведет к сообщению об ошибке: Примечание: неопределенная переменная: http_response_header

3) Длина и значение массива места в массиве могут измениться в зависимости от запрашиваемого сервера и ответ получен. я не уверен, что есть какое-либо «абсолютное» значение позиции в массиве.

4) получает только $ http_response_header заполняется с помощью file_get_contents () при использовании URL, а не локальный файл. Это указано в описании, когда в нем упоминается HTTP_wrapper.

4 голосов
/ 04 февраля 2011

Используйте curl вместо file_get_contents.

См .: http://www.php.net/manual/en/curl.examples-basic.php

Я полагаю, что если вы общаетесь с REST Api, то вы действительно хотите получить код статуса Http. В этом случае вы можете сделать что-то вроде этого:

<?php
$ch = curl_init("http://www.example.com/api/users/1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == 501) {
    echo 'Ops it not implemented';
}
fclose($fp);
?>
0 голосов
/ 04 февраля 2011
file_get_contents('http://example.com');
var_dump($http_response_header);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...