簡體   English   中英

如何將 HTTP 請求中的所有信息打印到屏幕,在 PHP

[英]How to print all information from an HTTP request to the screen, in PHP

我需要一些 PHP 代碼來轉儲 HTTP 請求中的所有信息,包括標頭和 POST 請求中包含的任何信息的內容。 基本上,這是一種診斷工具,可以准確地顯示我發送到服務器的內容。

有沒有人有一些代碼可以做到這一點?

最后:

print_r($_REQUEST);

這涵蓋了大多數傳入的項目: PHP.net手冊:$ _REQUEST

一個簡單的方法是:

<?php
print_r($_SERVER);
print_r($_POST);
print_r($_GET);
print_r($_FILES);
?>

需要進行一些按摩以按照您想要的順序獲取所有內容,並排除您不感興趣的變量,但應該給您一個開始。

好吧,你可以像這樣閱讀整個POST主體

echo file_get_contents( 'php://input' );

並且,假設您的Web服務器是Apache,您可以像這樣讀取請求標頭

$requestHeaders = apache_request_headers();

沒有人提到在任何情況下如何正確轉儲HTTP頭。

從CGI規范rfc3875,第4.1.18節:

名稱以“HTTP_”開頭的元變量包含從客戶端請求標頭字段讀取的值,如果使用的協議是HTTP。 HTTP標頭字段名稱轉換為大寫,所有出現的“ - ”都替換為“ ”並且前面有“HTTP ”以提供元變量名稱。

foreach ($_SERVER as $key => $value) {
    if (strpos($key, 'HTTP_') === 0) {
        $chunks = explode('_', $key);
        $header = '';
        for ($i = 1; $y = sizeof($chunks) - 1, $i < $y; $i++) {
            $header .= ucfirst(strtolower($chunks[$i])).'-';
        }
        $header .= ucfirst(strtolower($chunks[$i])).': '.$value;
        echo $header.'<br>';
    }
}

詳細信息: http//cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html

匯總Peter BaileyCmyker的答案,你得到的結論如下:

<?php
foreach ($_SERVER as $key => $value) {
    if (strpos($key, 'HTTP_') === 0) {
        $chunks = explode('_', $key);
        $header = '';
        for ($i = 1; $y = sizeof($chunks) - 1, $i < $y; $i++) {
            $header .= ucfirst(strtolower($chunks[$i])).'-';
        }
        $header .= ucfirst(strtolower($chunks[$i])).': '.$value;
        echo $header."\n";
    }
}
$body = file_get_contents('php://input');
if ($body != '') {
  print("\n$body\n\n");
}
?>

它與php -S內置的webserver一起使用,這是PHP的一個非常方便的功能。

如果您想要實際的HTTP標頭(請求和響應), 嘗試使用hurl.it。

您可以使用PHP命令apache_request_headers()來獲取請求標頭,使用apache_response_headers()來獲取當前響應標頭。 請注意,只要內容尚未提供,就可以在PHP腳本中稍后更改響應。

file_get_contents('php:// input')並不總是有效。

我在標題“content-length = 735”和“php:// input”中有一個請求是空字符串。 所以取決於HTTP請求的好/有效程度。

另外,你可以使用get_headers() 它不依賴於apache ..

print_r(get_headers());

問題是,在URL我寫了http:// my_domain而不是https:// my_domain

這就是我使用的:

foreach ($_SERVER as $key => $value) { error_log("$key: $value");   }

暫無
暫無

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

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