簡體   English   中英

如何使用PHP腳本記錄原始HTTP標頭?

[英]How do I log the raw HTTP headers with a PHP script?

我正在使用cURL腳本通過代理將POST數據發送到腳本,我想查看cURL腳本發送的原始HTTP頭。 我嘗試過的事情清單:

  • 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 apache_request_headers()$HTTP_RAW_POST_DATA沒有輸出所有內容。

救命?

打開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 **/
}

您還需要設置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);

如果您在Apache上作為模塊運行,那么apache_request_headers () 可以滿足您的需求。

對於幾乎任何其他架構,您只能選擇$ _SERVER中記錄的內容,或者您​​需要找到一些方法來使用Web服務器配置記錄信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM