1. リクエスト行を取得します: メソッド、URI、プロトコル
はスーパー変数 $_SERVER から取得できます。 3 つの変数の値は次のとおりです:
$_SERVER['REQUEST_METHOD']。 $_SERVER['REQUEST_URI'] .' '.$_SERVER['SERVER_PROTOCOL']."rn";
2. すべてのヘッダーを取得する
PHP には apache_request_headers( ) 関数を使用すると、HTTP リクエストのすべてのヘッダーを配列形式で返されます。ただし、この機能は Apache でのみ動作します。Nginx またはコマンド ラインに変更すると、機能が存在しないというエラーが直接報告されます。
より一般的な方法は、スーパー変数 $_SERVER から抽出することです。ヘッダーのキー値はすべて「HTTP_」で始まり、この機能に基づいて取得できます。コードは次のとおりです:
function get_all_headers() {
$headers = array();
foreach($_SERVER as $key => $value) {
if(substr($key, 0, 5) = == ' HTTP_') {
$key = substr($key, 5);
$key = str_replace('_', ' ', $key); ucwords($ key);
$key = str_replace(' ', '-', $key);
$headers[$key] = $value;
return $headers;ボディの取得
公式はリクエストのボディを取得するメソッドを提供しています:
file_get_contents('php://input')
4. 最終コード
/**
* HTTP リクエストの元のテキストを取得します
* @return string
*/
function get_http_raw() {
$raw = '';
// (1) リクエスト行
$raw .= $_SERVER['REQUEST_METHOD'].' '.$_SERVER['SERVER_PROTOCOL'] ."rn ";
// (2) リクエストヘッダー
foreach($_SERVER as $key => $value) {
if(substr($key, 0, 5) === 'HTTP_') {
$key = substr($key, 5);
$key = str_replace('_', '-', $key);
$raw .= $key.': '.$value."rn"; }
}
// (3) 空行
$raw .= "rn";
// (4) リクエストボディ
$raw .= file_get_contents('php://input');生
}
http://www.bkjia.com/PHPjc/364740.html
www.bkjia.com
true