Как добавить параметр в заголовок запроса, отправленный скриптом PHP - PullRequest
0 голосов
/ 24 декабря 2011

Я пытаюсь использовать API REST веб-службы, для которого мне нужно добавить параметр для авторизации (с соответствующим ключом, конечно), чтобы получить результат в формате XML.Я занимаюсь разработкой на PHP.Как я могу добавить параметр в заголовок запроса в такой ситуации?

Редактировать: Сейчас я выполняю запрос $xml = simplexml_load_file($query_string);

Ответы [ 2 ]

4 голосов
/ 24 декабря 2011

Вы используете локон? (рекомендуется)

Я предполагаю, что вы используете curl для выполнения этих запросов к REST API, если вы этого не делаете; используйте это.

При использовании curl вы можете добавить пользовательский заголовок, вызвав curl_setopt с соответствующими параметрами, как показано ниже.

 curl_setopt (
   $curl_handle, CURLOPT_HTTPHEADER,
   array ('Authentication-Key: foobar')
 ); // make curl send a HTTP header named 'Authentication-key'
    // with the value 'foobar'

Документация:


Вы используете file_get_contents или подобное?

Этот метод не рекомендуется, хотя он и функционален.

Примечание: allow_url_fopen должен быть включен для file_get_contents, чтобы иметь возможность доступа к ресурсам через HTTP.

Если вы хотите добавить пользовательский заголовок к такому запросу, вам нужно создать действительный stream context, как показано в следующем фрагменте:

$context_options = array(
  'http' =>array (
    'method' => 'GET',
    'header' => 'Authentication-Key'
  )
);

$context  = stream_context_create ($context_options);

$response = file_get_contents (
  'http://www.stackoverflow.com', false, $context_options
);

Документация


Я не использую ни одно из указанных выше решений, что мне делать?

[Post OP EDIT]

Я рекомендую извлечь данные, используя curl, а затем передать их анализатору, когда все данные получены. Отдельная выборка данных и обработка возвращенных данных.

[/ Post OP EDIT]


0 голосов
/ 24 декабря 2011

Когда вы используете $xml = simplexml_load_file($query_string);, интерпретатор PHP вызывает свою оболочку над fopen, чтобы открыть содержимое файла, расположенного в $query_string. Если $query_string является удаленным файлом, интерпретатор PHP открывает поток для этого удаленного URL-адреса и извлекает содержимое файла (если код ответа HTTP 200 OK). Для этого используется контекст потока по умолчанию.

Существует способ изменить заголовки, отправленные путем изменения контекста потока, однако в большинстве случаев это плохая идея. Вы полагаетесь на PHP, чтобы всегда открывать все файлы, локальные или удаленные, используя функцию, которая должна была принимать только локальное имя файла. Это не только проблема безопасности, но и источник ошибки, которую очень трудно отследить.

Вместо этого рассмотрите возможность разделения загрузки удаленного контента с помощью cURL (проверка возвращенного кода состояния HTTP и других проверок работоспособности) и последующего синтаксического анализа этого контента в объект SimpleXMLElement для использования. Когда вы используете cURL, вы можете установить любые заголовки, которые вы хотите отправить с запросом, вызвав что-то похожее на curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName' => 'value');

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...