Php get input headers

Как прочитать заголовок любого запроса в PHP

Например, пользовательский заголовок: X-Requested-With .

ЕСЛИ : вам нужен только один заголовок, а не все заголовки, самый быстрый способ:

ELSE IF : вы запускаете PHP как модуль Apache или, как и PHP 5.4, используя FastCGI (простой метод):

ELSE: В любом другом случае вы можете использовать (пользовательскую реализацию):

 $value) < if (substr($key, 0, 5) <>'HTTP_') < continue; >$header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5))))); $headers[$header] = $value; > return $headers; > $headers = getRequestHeaders(); foreach ($headers as $header => $value) < echo "$header: $value 
\n"; >

См. Также :
getallheaders () – (PHP> = 5.4) межплатформенная версия Псевдоним apache_request_headers() apache_response_headers () – выборки всех HTTP-заголовков ответов.
headers_list () – выбор списка заголовков для отправки.

$_SERVER['HTTP_X_REQUESTED_WITH'] 

Мета-переменные с именами, начинающимися с HTTP_ содержат значения, считанные из полей заголовка запроса клиента, если используется протокол HTTP. Имя поля заголовка HTTP преобразуется в верхний регистр, имеет все вхождения — заменено на _ и имеет HTTP_ чтобы присвоить имя мета-переменной.

Вы должны найти все HTTP-заголовки в глобальной переменной $_SERVER префиксом HTTP_ и дефисами (-) заменяться HTTP_ подчеркивания (_).

Например, ваш X-Requested-With можно найти в:

$_SERVER['HTTP_X_REQUESTED_WITH'] 

Может быть удобно создать ассоциативный массив из переменной $_SERVER . Это можно сделать в нескольких стилях, но вот функция, которая выводит клавиши с верёвкой:

$headers = array(); foreach ($_SERVER as $key => $value) < if (strpos($key, 'HTTP_') === 0) < $headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value; >> 

Теперь просто используйте $headers[‘XRequestedWith’] чтобы получить желаемый заголовок.

Начиная с PHP 5.4.0 вы можете использовать функцию getallheaders которая возвращает все запрошенные заголовки как ассоциативный массив:

var_dump(getallheaders()); // array(8) < // ["Accept"]=>// string(63) "text/html[. ]" // ["Accept-Charset"]=> // string(31) "ISSO-8859-1[. ]" // ["Accept-Encoding"]=> // string(17) "gzip,deflate,sdch" // ["Accept-Language"]=> // string(14) "en-US,en;q=0.8" // ["Cache-Control"]=> // string(9) "max-age=0" // ["Connection"]=> // string(10) "keep-alive" // ["Host"]=> // string(9) "localhost" // ["User-Agent"]=> // string(108) "Mozilla/5.0 (Windows NT 6.1; WOW64) [. ]" // > 

Ранее эта функция работала только тогда, когда PHP работал как модуль Apache / NSAPI.

В некоторых предлагаемых решениях strtolower не хватает, RFC2616 (HTTP / 1.1) определяет поля заголовка как нечувствительные к регистру объекты. Все дело не только в ценности .

Поэтому предложения, подобные только разбору записей HTTP_ , неверны.

if (!function_exists('getallheaders')) < foreach ($_SERVER as $name =>$value) < /* RFC2616 (HTTP/1.1) defines header fields as case-insensitive entities. */ if (strtolower(substr($name, 0, 5)) == 'http_') < $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; >> $this->request_headers=$headers; > else < $this->request_headers = getallheaders(); > 

Обратите внимание на тонкие отличия от предыдущих предложений. Функция здесь также работает на php-fpm (+ nginx).

Передайте ключ заголовка, эта функция вернет свое значение, вы можете получить значение заголовка без использования цикла for

function get_header( $headerKey ) < $test = getallheaders(); if ( array_key_exists($headerKey, $test) ) < $headerValue = $test[ $headerKey ]; >return $headerValue; > 

Чтобы все было просто, вот как вы можете получить только тот, который вам нужен:

$headerValue = $_SERVER['HTTP_X_REQUESTED_WITH']; 

или когда вам нужно получить по одному:

 return $headerValue; > // X-Requested-With mainly used to identify Ajax requests. Most JavaScript frameworks // send this header with value of XMLHttpRequest, so this will not always be present. $header_x_requested_with = get_header( 'X-Requested-With' ); 

Другие заголовки также находятся в супер-глобальном массиве $ _SERVER, вы можете прочитать о том, как добраться до них здесь: http://php.net/manual/en/reserved.variables.server.php

Вот как я это делаю. Вам нужно получить все заголовки, если $ header_name не передано:

 else < $header_name_safe=str_replace("-", "_", strtoupper(preg_quote($header_name))); $headers=preg_grep("/^HTTP_$$/si", $keys); > foreach($headers as $header) < if(is_null($header_name))< $headervals[substr($header, 5)]=$_SERVER[$header]; >else < return $_SERVER[$header]; >> return $headervals; > print_r(getHeaders()); echo "\n\n".getHeaders("Accept-Language"); ?> 

Мне это намного проще, чем большинство примеров, приведенных в других ответах. Это также получает метод (GET / POST / etc.) И запрашиваемый URI при получении всех заголовков, которые могут быть полезны, если вы пытаетесь использовать его при регистрации.

Array ( [HOST] => 127.0.0.1 [USER_AGENT] => Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0 [ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [ACCEPT_LANGUAGE] => en-US,en;q=0.5 [ACCEPT_ENCODING] => gzip, deflate [COOKIE] => PHPSESSID=MySessionCookieHere [CONNECTION] => keep-alive ) en-US,en;q=0.5 

Вот простой способ сделать это.

// echo get_header('X-Requested-With'); function get_header($field) < $headers = headers_list(); foreach ($headers as $header) < list($key, $value) = preg_split('/:\s*/', $header); if ($key == $field) return $value; >> 
function getCustomHeaders() < $headers = array(); foreach($_SERVER as $key =>$value) < if(preg_match("/^HTTP_X_/", $key)) $headers[$key] = $value; >return $headers; > 

Я использую эту функцию для получения пользовательских заголовков, если заголовок начинается с «HTTP_X_», мы вставляем массив 🙂

Я использовал CodeIgniter и использовал код ниже, чтобы получить его. Может быть полезным для кого-то в будущем.

$this->input->get_request_header('X-Requested-With'); 

Этот небольшой фрагмент PHP может быть вам полезен:

Источник

How to Read Request Headers in PHP

When typing a URL in the browser’s address bar and trying to access it, an HTTP request is sent to the server by the browser. It encompasses information in a text-record state including the type, the capabilities, user’s operation system, the browser generating the request, and more.

Getting the request header, the web server sends an HTTP response head to the client.

Below, we will show you how to read any request header in PHP.

Using the getallheaders() Function

To achieve what was described above, you can use the getllheaders() function.

Let’s check out an example with its output:

 foreach (getallheaders() as $name => $value) < echo "$name: $value 
"
; > ?>
Host: 127.0.0.3:2025 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36 Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, */*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: en-US, en;q=0.9

Using apache_request_headers() Function

Now, let’s check out an example of using another helpful method that is the apache_request_headers() function:

 $header = apache_request_headers(); foreach ($header as $headers => $value) < echo "$headers: $value 
\n"
; > ?>

The output will look as follows:

Host: 127.0.0.6:2027 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36 Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, */*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: en-US, en;q=0.9

Describing HTTP Headers

An HTTP header is considered a code, which transfers the data between the browser and the web server.

Generally, HTTP headers are used for the communication between the client and the server in both of the directions.

Источник

Get HTTP Request Headers and Body

Searching the net I couldn’t find a simple way of retrieving HTTP Request Headers and HTTP Request Body in a PHP Script. PECL extensions offer this but not a standard PHP install. So heres a simple class that will do it for you. Docs in my blog: http://fijiwebdesign.com/content/view/90/77/

retrieve_headers($add_headers); $this->body = @file_get_contents('php://input'); > /** * Retrieve the HTTP request headers from the $_SERVER superglobal * @param Array Additional Headers to retrieve */ function retrieve_headers($add_headers = false) < if ($add_headers) < $this->add_headers = array_merge($this->add_headers, $add_headers); > if (isset($_SERVER['HTTP_METHOD'])) < $this->method = $_SERVER['HTTP_METHOD']; unset($_SERVER['HTTP_METHOD']); > else < $this->method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : false; > $this->protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : false; $this->request_method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : false; $this->headers = array(); foreach($_SERVER as $i=>$val) < if (strpos($i, 'HTTP_') === 0 || in_array($i, $this->add_headers)) < $name = str_replace(array('HTTP_', '_'), array('', '-'), $i); $this->headers[$name] = $val; > > > /** * Retrieve HTTP Method */ function method() < return $this->method; > /** * Retrieve HTTP Body */ function body() < return $this->body; > /** * Retrieve an HTTP Header * @param string Case-Insensitive HTTP Header Name (eg: "User-Agent") */ function header($name) < $name = strtoupper($name); return isset($this->headers[$name]) ? $this->headers[$name] : false; > /** * Retrieve all HTTP Headers * @return array HTTP Headers */ function headers() < return $this->headers; > /** * Return Raw HTTP Request (note: This is incomplete) * @param bool ReBuild the Raw HTTP Request */ function raw($refresh = false) < if (isset($this->raw) && !$refresh) < return $this->raw; // return cached > $headers = $this->headers(); $this->raw = "method>\r\n"; foreach($headers as $i=>$header) < $this->raw .= "$i: $header\r\n"; > $this->raw .= "\r\nbody>"; return $this->raw; > > /** * Example Usage * Echos the HTTP Request back to the client/browser */ $http_request = new http_request(); $resp = $http_request->raw(); echo nl2br($resp); ?>

Thanks, this is great php code to read the api info sent using Post from another website, but I want to get only specific values sent using api. for example I want to know user_email how can get that.

This depends on the API. Perhaps the api itself has a method for just picking certain data. Otherwise you just get hold of the data and navigate to the particular object or array item. API can return all sorts of data formats, but json is becoming very popular. The json_decode() function will turn the json data into a stdClass object, which you can traverse. Additionally the json_decode() function with its second parameter set to true will create the comparable associated array. Example.

$data = json_decode(file_get_contents('http://www.example.com/api/sample/'), true); //get associated array $email = $data['user_email']; $data = json_decode(file_get_contents('http://www.example.com/api/sample/')); //get data as stdClass object $email = $data->user_email; 

Thank you diafol, the problem is I don’t know the url to use file_get_contents, the other site will send data like (api_type:ping, purchase_id, token, full_name, email_address, and country_code) about a product to my api page, I have my account_secret_code my api page must read posted data via api and compare the token with generated token if it is correct then store the information in the data base, my problem is in reading posted data, I tried to use this code which is from the above code in the article:

$headers = array(); foreach($_SERVER as $i=>$val) < $name = str_replace(array('HTTP_', '_'), array('', '-'), $i); $headers[$name] = $val; >echo $headers['USER-EMAIL']; 

Источник

Читайте также:  My Page
Оцените статью