- get_headers
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
- get_headers
- Parameters
- Return Values
- Changelog
- Examples
- See Also
- How to get HTTP headers in PHP
- CURL request:
- apache_request_headers() function
- get_headers() function
- $http_response_header
- Examples
- User Contributed Notes 5 notes
get_headers
get_headers() возвращает массив с заголовками из ответа сервера на HTTP-запрос.
Список параметров
Если необязательный параметр format установлен в ненулевое значение, get_headers() разберет ответ сервера и установит ключи для возвращаемого массива.
Возвращаемые значения
Возвращает список или ассоциативный массив с заголовками ответа при нормальном завершении и FALSE , если возникла ошибка.
Список изменений
Версия | Описание |
---|---|
5.1.3 | Эта функция теперь использует stream context по умолчанию, который может быть установлен или изменен при помощи функции stream_context_set_default() . |
Примеры
Пример #1 Пример использования get_headers()
print_r ( get_headers ( $url ));
print_r ( get_headers ( $url , 1 ));
?>
Результатом выполнения данного примера будет что-то подобное:
Array ( [0] => HTTP/1.1 200 OK [1] => Date: Sat, 29 May 2004 12:28:13 GMT [2] => Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT [4] => ETag: "3f80f-1b6-3e1cb03b" [5] => Accept-Ranges: bytes [6] => Content-Length: 438 [7] => Connection: close [8] => Content-Type: text/html ) Array ( [0] => HTTP/1.1 200 OK [Date] => Sat, 29 May 2004 12:28:14 GMT [Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux) [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT [ETag] => "3f80f-1b6-3e1cb03b" [Accept-Ranges] => bytes [Content-Length] => 438 [Connection] => close [Content-Type] => text/html )
Пример #2 Пример использования запроса HEAD в функции get_headers()
// По умолчанию функция get_headers использует GET-запрос для получения заголовков. Если
// вы хотите вместо него отправить HEAD-запрос, то это можно сделать следующим образом, используя stream context:
stream_context_set_default (
array(
‘http’ => array(
‘method’ => ‘HEAD’
)
)
);
$headers = get_headers ( ‘http://example.com’ );
?>?php
Смотрите также
get_headers
get_headers() returns an array with the headers sent by the server in response to a HTTP request.
Parameters
If the optional associative parameter is set to true, get_headers() parses the response and sets the array’s keys.
A valid context resource created with stream_context_create() , or null to use the default context.
Return Values
Returns an indexed or associative array with the headers, or false on failure.
Changelog
Version | Description |
---|---|
8.0.0 | The associative has been changed from int to bool . |
7.1.0 | The context parameter was added. |
Examples
Example #1 get_headers() example
print_r ( get_headers ( $url ));
print_r ( get_headers ( $url , true ));
?>
The above example will output something similar to:
Array ( [0] => HTTP/1.1 200 OK [1] => Date: Sat, 29 May 2004 12:28:13 GMT [2] => Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT [4] => ETag: "3f80f-1b6-3e1cb03b" [5] => Accept-Ranges: bytes [6] => Content-Length: 438 [7] => Connection: close [8] => Content-Type: text/html ) Array ( [0] => HTTP/1.1 200 OK [Date] => Sat, 29 May 2004 12:28:14 GMT [Server] => Apache/1.3.27 (Unix) (Red-Hat/Linux) [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT [ETag] => "3f80f-1b6-3e1cb03b" [Accept-Ranges] => bytes [Content-Length] => 438 [Connection] => close [Content-Type] => text/html )
Example #2 get_headers() using HEAD example
// By default get_headers uses a GET request to fetch the headers. If you
// want to send a HEAD request instead, you can do so using a stream context:
stream_context_set_default (
array(
‘http’ => array(
‘method’ => ‘HEAD’
)
)
);
$headers = get_headers ( ‘http://example.com’ );
?>?php
See Also
How to get HTTP headers in PHP
You have already know that generally you send external API request, you also need to send Content-Type in header. Some API only accepts request if you sent proper headers. When the API call succeed, the server also send headers in response.
Headers are the additional data which are send with the request and response. Generally the header data contains information about data-type, request source and authentication credentials etc.
You may want to get information about headers and validate request. PHP gives you several ways to get headers from request and response.
In this article, we will discuss few ways how to get headers from request and response sent by server.
CURL request:
The first and widely used to get headers from request is using PHP curl. This method also used to get headers from all type of request.
Here is the below example how you can get headers array:
This will return header array in response:
Array
(
[0] => HTTP/2 301
[1] => location: https://www.google.com/
[2] => content-type: text/html; charset=UTF-8
[3] => date: Tue, 10 Aug 2021 11:45:33 GMT
[4] => expires: Thu, 09 Sep 2021 11:45:33 GMT
[5] => cache-control: public, max-age=2592000
[6] => server: gws
[7] => content-length: 220
[8] => x-xss-protection: 0
[9] => x-frame-options: SAMEORIGIN
[10] => alt-svc: h3=»:443″; ma=2592000,h3-29=»:443″; ma=2592000,h3-T051=»:443″; ma=2592000,h3-Q050=»:443″; ma=2592000,h3-Q046=»:443″; ma=2592000,h3-Q043=»:443″; ma=2592000,quic=»:443″; ma=2592000; v=»46,43″
[11] =>
[12] =>
)
You can convert headers in key:value format using below loop.
$data = []; foreach ($headers as $value) < $parts = explode(':', $value); if (count($parts) === 2) < $data[trim($parts[0])] = trim($parts[1]); >> print_r($data);
Array
(
[content-type] => text/html; charset=UTF-8
[cache-control] => public, max-age=2592000
[server] => gws
[content-length] => 220
[x-xss-protection] => 0
[x-frame-options] => SAMEORIGIN
)
apache_request_headers() function
apache_request_headers() function returns all headers for current request. The function returns associative array of all the HTTP headers in the current request. It returns false on failure.
This will return response for my localhost web request:
Array
(
[Host] => localhost
[Connection] => keep-alive
[Cache-Control] => max-age=0
[sec-ch-ua] => «Chromium»;v=»92″, » Not A;Brand»;v=»99″, «Google Chrome»;v=»92″
[sec-ch-ua-mobile] => ?0
[Upgrade-Insecure-Requests] => 1
[User-Agent] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
[Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
[Sec-Fetch-Site] => none
[Sec-Fetch-Mode] => navigate
[Sec-Fetch-User] => ?1
[Sec-Fetch-Dest] => document
[Accept-Encoding] => gzip, deflate, br
[Accept-Language] => en-GB,en-US;q=0.9,en;q=0.8
)
get_headers() function
get_headers() function returns all response headers sent by the server.
Below example shows the response headers for Google homepage:
It will return the array of headers sent by Google server:
Array
(
[0] => HTTP/1.0 200 OK
[1] => Date: Tue, 10 Aug 2021 12:01:20 GMT
[2] => Expires: -1
[3] => Cache-Control: private, max-age=0
[4] => Content-Type: text/html; charset=ISO-8859-1
[5] => P3P: CP=»This is not a P3P policy! See g.co/p3phelp for more info.»
[6] => Server: gws
[7] => X-XSS-Protection: 0
[8] => X-Frame-Options: SAMEORIGIN
[9] => Set-Cookie: 1P_JAR=2021-08-10-12; expires=Thu, 09-Sep-2021 12:01:20 GMT; path=/; domain=.google.com; Secure
[10] => Set-Cookie: NID=221=SEbyqqBM0d_cZ4I1qqC6o7sLHRQOpWg7qRdWMat3qN2ROYtC_XgyHQYfLZeMoKH9EiSNh_mglxQBtpJPkQnRiaFiEdvVn0MUypVN6VshIN16-OOaMU3JFZ3leCaioetNW0c5H8YfrUst2dIlBud4dRzoWA-YmnhjnsPbeOD_f9Q; expires=Wed, 09-Feb-2022 12:01:20 GMT; path=/; domain=.google.com; HttpOnly
[11] => Alt-Svc: h3=»:443″; ma=2592000,h3-29=»:443″; ma=2592000,h3-T051=»:443″; ma=2592000,h3-Q050=»:443″; ma=2592000,h3-Q046=»:443″; ma=2592000,h3-Q043=»:443″; ma=2592000,quic=»:443″; ma=2592000; v=»46,43″
[12] => Accept-Ranges: none
[13] => Vary: Accept-Encoding
)
I hope you liked the article and help in your web development.
$http_response_header
The $http_response_header array is similar to the get_headers() function. When using the HTTP wrapper, $http_response_header will be populated with the HTTP response headers. $http_response_header will be created in the local scope.
Examples
Example #1 $http_response_header example
function get_contents () file_get_contents ( «http://example.com» );
var_dump ( $http_response_header );
>
get_contents ();
var_dump ( $http_response_header );
?>?php
The above example will output something similar to:
array(9) < [0]=>string(15) "HTTP/1.1 200 OK" [1]=> string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT" [2]=> string(29) "Server: Apache/2.2.3 (CentOS)" [3]=> string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT" [4]=> string(27) "ETag: "280100-1b6-80bfd280"" [5]=> string(20) "Accept-Ranges: bytes" [6]=> string(19) "Content-Length: 438" [7]=> string(17) "Connection: close" [8]=> string(38) "Content-Type: text/html; charset=UTF-8" > NULL
User Contributed Notes 5 notes
Note that the HTTP wrapper has a hard limit of 1024 characters for the header lines.
Any HTTP header received that is longer than this will be ignored and won’t appear in $http_response_header.
The cURL extension doesn’t have this limit.
http_fopen_wrapper.c: #define HTTP_HEADER_BLOCK_SIZE 1024
parser function to get formatted headers (with response code)
function parseHeaders ( $headers )
$head = array();
foreach( $headers as $k => $v )
$t = explode ( ‘:’ , $v , 2 );
if( isset( $t [ 1 ] ) )
$head [ trim ( $t [ 0 ]) ] = trim ( $t [ 1 ] );
else
$head [] = $v ;
if( preg_match ( «#HTTP/[0-9\.]+\s+(9+)#» , $v , $out ) )
$head [ ‘reponse_code’ ] = intval ( $out [ 1 ]);
>
>
return $head ;
>
print_r ( parseHeaders ( $http_response_header ));
/*
Array
(
[0] => HTTP/1.1 200 OK
[reponse_code] => 200
[Date] => Fri, 01 May 2015 12:56:09 GMT
[Server] => Apache
[X-Powered-By] => PHP/5.3.3-7+squeeze18
[Set-Cookie] => PHPSESSID=ng25jekmlipl1smfscq7copdl3; path=/
[Expires] => Thu, 19 Nov 1981 08:52:00 GMT
[Cache-Control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
[Pragma] => no-cache
[Vary] => Accept-Encoding
[Content-Length] => 872
[Connection] => close
[Content-Type] => text/html
)
*/
It seems that, if the server returns an HTTP/1.1 100 Continue, the variable $http_response_header is unset. This corner case may be difficult to be detected.
For this and other reasons I recommend PHP cURL, instead of file_get_contents().
If an HTTP Redirect is encountered, the headers will contain the response line and headers for all requests encountered. Consider this example:
array(23) [0]=>
string(18) «HTTP/1.1 302 FOUND»
[1]=>
string(17) «Connection: close»
[2]=>
string(22) «Server: meinheld/0.6.1»
[3]=>
string(35) «Date: Tue, 06 Feb 2018 11:21:21 GMT»
[4]=>
string(38) «Content-Type: text/html; charset=utf-8»
[5]=>
string(17) «Content-Length: 0»
[6]=>
string(30) «Location: https://httpbin.org/»
[7]=>
string(30) «Access-Control-Allow-Origin: *»
[8]=>
string(38) «Access-Control-Allow-Credentials: true»
[9]=>
string(19) «X-Powered-By: Flask»
[10]=>
string(34) «X-Processed-Time: 0.00107908248901»
[11]=>
string(14) «Via: 1.1 vegur»
[12]=>
string(15) «HTTP/1.1 200 OK»
[13]=>
string(17) «Connection: close»
[14]=>
string(22) «Server: meinheld/0.6.1»
[15]=>
string(35) «Date: Tue, 06 Feb 2018 11:21:21 GMT»
[16]=>
string(38) «Content-Type: text/html; charset=utf-8»
[17]=>
string(21) «Content-Length: 13011»
[18]=>
string(30) «Access-Control-Allow-Origin: *»
[19]=>
string(38) «Access-Control-Allow-Credentials: true»
[20]=>
string(19) «X-Powered-By: Flask»
[21]=>
string(34) «X-Processed-Time: 0.00848388671875»
[22]=>
string(14) «Via: 1.1 vegur»
>
Bear in mind this special variable is somehow protected and not populated in some situation when the peer server close the connection early on (ssl reset)
=> Undefined variable: http_response_header
Will return a cryptic error message:
Fatal error: Call to undefined function array() on line 2
—
Should you want to cope with this situation:
$hdrs = array(‘HTTP/1.1 400 Bad request’);
!empty($htp_response_header) && $hdrs = $http_response_headers;
Now use $hdrs in place of $http_response_header