Как мне записать необработанные HTTP-заголовки с помощью PHP-скрипта? - PullRequest
5 голосов
/ 16 июня 2010

Я использую сценарий cURL для отправки данных POST через прокси-сервер к сценарию, и я хочу посмотреть, какие необработанные HTTP-заголовки отправляет сценарий cURL.Список вещей, которые я пробовал:

  • echo curl_getinfo($ch, CURLINFO_HEADER_OUT) не выводит.
  • file_get_contents('php://input') получает некоторые заголовки HTTP, но не все.
  • print_r($_SERVER)также получает некоторые заголовки HTTP, но не все (я знаю это, потому что должен быть заголовок X-Forwarded-For, а его нет)
  • Печать всех суперглобальных элементов ($ _POST, $ _GET, $ _REQUEST, $ _FILESи т.д.) все еще не показывает необработанные заголовки HTTP.
  • http_get_request_headers(), apache_request_headers(), $http_response_header, $HTTP_RAW_POST_DATA не выводят все данные.

Справка?

Ответы [ 3 ]

2 голосов
/ 25 июня 2010

Включите CURLOPT_HEADER, а не CURLINFO_HEADER_OUT, затем разделите на \ r \ n \ r \ n (где заканчивается заголовок) с максимальным счетчиком разделения 2:

<?php
$ch = curl_init('http://www.yahoo.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$result = curl_exec($ch);
if ($result !== false) {
    $split_result = split("\r\n\r\n", $result, 2);
    $header = $split_result[0];
    $body = $split_result[1];
    /** Process here **/
} else {
   /** Error handling here **/
}
1 голос
/ 16 июня 2010

Вам также необходимо установить параметр CURLINFO_HEADER_OUT:

CURLINFO_HEADER_OUT
TRUE, чтобы отслеживать строку запроса дескриптора.
Доступно с PHP 5.1.3.Префикс CURLINFO_ является преднамеренным.

http://www.php.net/manual/en/function.curl-setopt.php

Следующие работы:

<?php

$ch = curl_init('http://www.google.com');
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
0 голосов
/ 16 июня 2010

Если вы работаете как модуль на Apache, тогда apache_request_headers () делает то, что вам нужно.

Для любой другой архитектуры вы сможете выбрать только то, чтозаписывается в $ _SERVER, или вам нужно найти способ записать информацию, используя конфигурацию веб-сервера.

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