Home > Article > Backend Development > PHP gets the original text of the HTTP request_PHP tutorial
1. Get the request line: Method, URI, protocol
can be obtained from the super variable $_SERVER. The values of the three variables are as follows:
$_SERVER['REQUEST_METHOD']. ' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."rn";
2. Get all Headers
PHP has a built-in function getallheader(), which is An alias of the apache_request_headers() function that can return all headers of the HTTP request in the form of an array. But this function can only work under Apache. If you change to Nginx or the command line, an error that the function does not exist will be reported directly.
A more general method is to extract it from the super variable $_SERVER. The key values of the headers all start with "HTTP_". You can obtain all the headers based on this feature. The code is as follows:
function get_all_headers() {
$headers = array();
foreach($_SERVER as $key => $value) {
if(substr ($key, 0, 5) === 'HTTP_') {
$key = substr($key, 5);
$key = strtolower($key);
$key = str_replace( '_', ' ', $key);
$key = ucwords($key);
$key = str_replace(' ', '-', $key);
$headers [$key] = $value;
}
}
return $headers;
}
3. Get Body
Officially provides a get request Body method, namely:
file_get_contents('php://input')
4. Final code
/**
* Get the original text of the HTTP request
* @return string
*/
function get_http_raw() {
$raw = '';
// (1) Request line
$raw .= $_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."rn";
// (2) Request Headers
foreach($_SERVER as $key => $value) {
if(substr ($key, 0, 5) === 'HTTP_') {
$key = substr($key, 5);
$key = str_replace('_', '-', $key);
$raw .= $key.': '.$value."rn";
}
}
// (3) Blank line
$raw .= "rn";
// (4) Request Body
$raw .= file_get_contents('php://input');
return $raw;
}