Я использую ВИХРЕВОЙ сценарий для отправки данных POST через прокси к сценарию, и я хочу видеть, какие необработанные HTTP-заголовки ВИХРЕВОЙ сценарий отправляет. Список вещей я попробовал:
echo curl_getinfo($ch, CURLINFO_HEADER_OUT)
не дает вывода.file_get_contents('php://input')
получает некоторые HTTP-заголовки, но не все.print_r($_SERVER)
также получает некоторые HTTP-заголовки, но не все (я знаю это, потому что должен быть заголовок X-Forwarded-For и нет),http_get_request_headers()
, apache_request_headers()
, $http_response_header
, $HTTP_RAW_POST_DATA
не производят все.Помощь?
Если вы работаете как модуль на Apache, то apache_request_headers () сделает то, что вам нужно.
Практически для любой другой архитектуры вы сможете выбрать только то, что записано в $ _SERVER, или вам нужно будет найти способ записать информацию, используя конфигурацию веб-сервера.
Вам также нужно установить опцию 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);
Включите 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 **/
}