除錯 API、Webhook、Proxy 轉發時,常需完整重現客戶端發送的原始 HTTP 報文。本文整理從 $_SERVER 重建請求行、解析所有 Header、讀取 Body 的完整函數 get_http_raw(),相容 Apache/Nginx/CLI 環境。
$_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . ' ' . $_SERVER['SERVER_PROTOCOL']$_SERVER 中 HTTP_ 開頭鍵值轉換(HTTP_CONTENT_TYPE → Content-Type)。file_get_contents('php://input') 讀取原始輸入流。function get_http_raw() {
$raw = '';
// (1) 請求行
$raw .= $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . ' ' . $_SERVER['SERVER_PROTOCOL'] . "\r\n";
// (2) Headers
foreach ($_SERVER as $key => $value) {
if (substr($key, 0, 5) === 'HTTP_') {
$key = substr($key, 5);
$key = str_replace('_', '-', $key);
$raw .= $key . ': ' . $value . "\r\n";
}
}
// (3) 空行分隔
$raw .= "\r\n";
// (4) Body
$raw .= file_get_contents('php://input');
return $raw;
}
php://input 無法讀取 multipart/form-data(檔案上傳),需改用 $_FILES。getallheaders() 不可用,本函數透過 $_SERVER 相容性最佳。$_SERVER['HTTPS']、$_SERVER['SSL_*'] 可補充協資訊。