accept标头 php,如何在PHP中读取任何请求标头

如何在PHP中读取任何请求标头

我应该如何阅读PHP中的任何标题?

例如,自定义标头:X-Requested-With。

Sabya asked 2019-02-28T12:09:45Z

14个解决方案

349 votes

$_SERVER['HTTP_X_REQUESTED_WITH']

RFC3875,4.1.18:

如果使用的协议是HTTP,则名称以HTTP_开头的元变量包含从客户端请求标头字段读取的值。 HTTP标头字段名称转换为大写,所有出现的-都替换为_,并且前缀为HTTP_以提供元变量名称。

Quassnoi answered 2019-02-28T12:11:14Z

256 votes

IF:您只需要一个标题,而不是所有标题,最快的方法是:

// Replace XXXXXX_XXXX with the name of the header you need in UPPERCASE (and with '-' replaced by '_')

$headerStringValue = $_SERVER['HTTP_XXXXXX_XXXX'];

ELSE IF:您将PHP作为Apache模块运行,或者从PHP 5.4开始,使用FastCGI(简单方法):

apache_request_headers()

$headers = apache_request_headers();

foreach ($headers as $header => $value) {

echo "$header: $value
\n";

}

ELSE:在任何其他情况下,您都可以使用(userland implementation):

function getRequestHeaders() {

$headers = array();

foreach($_SERVER as $key => $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&gt; = 5.4)跨平台版别名apache_request_headers()apache_response_headers() - 获取所有HTTP响应头。

headers_list() - 获取要发送的标头列表。

Jacco answered 2019-02-28T12:10:39Z

47 votes

您应该在$_SERVER全局变量中找到所有HTTP标头,前缀为HTTP_大写,短划线( - )替换为下划线(_)。

例如,您的$_SERVER可以在以下位置找到:

$_SERVER['HTTP_X_REQUESTED_WITH']

从$_SERVER变量创建关联数组可能很方便。 这可以用几种样式完成,但这是一个输出camelcased键的函数:

$headers = array();

foreach ($_SERVER as $key => $value) {

if (strpos($key, 'HTTP_') === 0) {

$headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;

}

}

现在只需使用$_SERVER来检索所需的标题。

PHP手册$_SERVER:[http://php.net/manual/en/reserved.variables.server.php]

Thomas Jensen answered 2019-02-28T12:12:21Z

18 votes

从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模块运行时才起作用。

Salman A answered 2019-02-28T12:13:07Z

6 votes

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)。

Glenn Plas answered 2019-02-28T12:14:14Z

5 votes

将标题名称传递给此函数以获取其值,而不使用for循环。 如果未找到标头,则返回null。

/**

* @var string $headerName case insensitive header name

*

* @return string|null header value or null if not found

*/

function get_header($headerName)

{

$headers = getallheaders();

return isset($headerName) ? $headers[$headerName] : null;

}

注意:这仅适用于Apache服务器,请参阅:[http://php.net/manual/en/function.getallheaders.php]

注意:此函数将处理并将所有标头加载到内存中,并且它的性能低于for循环。

Milap Kundalia answered 2019-02-28T12:15:23Z

3 votes

为了简单起见,您可以通过以下方式获得所需的内容:

简单:

$headerValue = $_SERVER['HTTP_X_REQUESTED_WITH'];

或者当你需要一次获得一个时:

/**

* @param $pHeaderKey

* @return mixed

*/

function get_header( $pHeaderKey )

{

// Expanded for clarity.

$headerKey = str_replace('-', '_', $pHeaderKey);

$headerKey = strtoupper($headerKey);

$headerValue = NULL;

// Uncomment the if when you do not want to throw an undefined index error.

// I leave it out because I like my app to tell me when it can't find something I expect.

//if ( array_key_exists($headerKey, $_SERVER) ) {

$headerValue = $_SERVER[ $headerKey ];

//}

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]

b01 answered 2019-02-28T12:16:12Z

2 votes

我正在使用CodeIgniter并使用下面的代码来获取它。 可能对将来有用。

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

Rajesh answered 2019-02-28T12:16:40Z

1 votes

这就是我在做的方式。 如果未传递$ header_name,则需要获取所有标头:

function getHeaders($header_name=null)

{

$keys=array_keys($_SERVER);

if(is_null($header_name)) {

$headers=preg_grep("/^HTTP_(.*)/si", $keys);

} else {

$header_name_safe=str_replace("-", "_", strtoupper(preg_quote($header_name)));

$headers=preg_grep("/^HTTP_${header_name_safe}$/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

Jonnycake answered 2019-02-28T12:17:26Z

0 votes

这是一个简单的方法。

// 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;

}

}

kehers answered 2019-02-28T12:17:57Z

0 votes

这个小的PHP代码段对您有所帮助:

foreach($_SERVER as $key => $value){

echo '$_SERVER["'.$key.'"] = '.$value."
";

}

?>

Technolust answered 2019-02-28T12:18:25Z

0 votes

function getCustomHeaders()

{

$headers = array();

foreach($_SERVER as $key => $value)

{

if(preg_match("/^HTTP_X_/", $key))

$headers[$key] = $value;

}

return $headers;

}

我使用此函数来获取自定义标头,如果标头从“HTTP_X_”开始我们推入数组:)

ZiTAL answered 2019-02-28T12:18:54Z

0 votes

如果只需要一个密钥来检索,例如需要"Host"地址,那么我们就可以使用了

apache_request_headers()['Host']

这样我们就可以避免循环并将其内联到echo输出中

Zigma Empire answered 2019-02-28T12:19:31Z

-1 votes

如果您有Apache服务器,这项工作

PHP代码:

$headers = apache_request_headers();

foreach ($headers as $header => $value) {

echo "$header: $value
\n";

}

结果:

Accept: */*

Accept-Language: en-us

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0

Host: www.example.com

Connection: Keep-Alive

Emanuel Nogueiras answered 2019-02-28T12:20:13Z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前百度首席科学家吴恩达携手富士康,要用人工智能升级制造业

来源&#xff1a;澎湃新闻概要&#xff1a;当地时间12月14日&#xff0c;吴恩达再一次通过英文自媒体平台Medium公布了自己的下一个创业项目——Landing.ai。作为人工智能领域里的明星科学家、斯坦福大学计算机系教授吴恩达&#xff08;Andrew Ng&#xff09;&#xff0c;离开百…

特殊SQL示例

ProductsData pd_num pd_type pd_statusSCS-1-00 SCS-1 0 SCS-1-002 SCS-1 0 SCS-2-001 SCS-2 0 SCS-2-001 SCS-2 1结果(num1 是pd_status0的个数&#xff0c;num1 是pd_status1的个数&#xff09;pd_type num1 num2scs-1 2…

php静态文件怎么生成器,[新姿势]我用过的静态站点生成器们

随着诸如github pages的静态托管服务&#xff0c;静态站点生成器在近年有了极大的发展&#xff0c;静态生成托管对托管环境要求低、维护简单、可配合版本控制&#xff0c;但又灵活多变&#xff0c;在程序员和geek群体中大有超越WordPress等动态博客程序的势头近年来个人也好项目…

腾讯AI Lab解析2017 NIPS三大研究方向,启动教授及学生合作项目

来源&#xff1a; 腾讯AI实验室概要&#xff1a;腾讯AI Lab去年4月成立&#xff0c;今年第二次参加NIPS&#xff0c;共有8篇文章被录取&#xff0c;含一篇口头报告&#xff08;Oral&#xff09;。在所有国内研究机构和高校中&#xff0c;录取论文数仅次于清华大学。NIPS被誉为机…

Jackson第一篇【JSON字符串、实体之间的相互转换】

来源&#xff1a;http://blog.csdn.net/songyongfeng/article/details/6932655 既然你看到这篇文章相信你已经了解JSON的好处了&#xff0c;那么废话不多说直接进入主题。 Jackson是java中众多json处理工具的一个&#xff0c;比起常见的Json-lib,Gson要快一些。 Jackson的官…

「自然语言处理」如何快速理解?有这篇文章就够了!

原文来源&#xff1a;codeburst.io作者&#xff1a;Pramod Chandrayan「雷克世界」编译&#xff1a;嗯~阿童木呀、我是卡布达现如今&#xff0c;在更多情况下&#xff0c;我们是以比特和字节为生&#xff0c;而不是依靠交换情感。我们使用一种称之为计算机的超级智能机器在互联…

another mysql daemon,[守护进程详解及创建,daemon()使用

一&#xff0c;守护进程概述Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务&#xff0c;不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务…

Jackson第二篇【从JSON字符串中取值】

来源&#xff1a;http://blog.csdn.net/songyongfeng/article/details/6932674 第一篇咱们主要学习了实体与json的相互转换的问题&#xff0c;但是咱们需要的是数据 你转换18遍我取不到数据也是扯淡&#xff0c;那么今天咱们就一起学习一下如何从使用Jackson从Json字符串中取值…

李开复:明年会有一批AI公司倒闭

来源&#xff1a;公众号黑智概要&#xff1a;在北美的四大AI巨头公司中&#xff0c;李开复的总结是&#xff1a;Google有大牛优势&#xff1b;Facebook做得更深&#xff0c;但没有平台化意识&#xff1b;微软在试着聚拢自己的实力&#xff1b;“四大AI公司中&#xff0c;有3家不…

java 多线程统计质数,Java 七 多线程计算某个范围内的质数

Java 7 多线程计算某个范围内的质数不多说了,看代码通用类package java7.concurrency.math;/*** This class generates prime numbers until is interrupted*/public class PrimeGenerator extends Thread{private long numberRange;public PrimeGenerator(long numberRange) {…

相互引用的初始化过程

问题说明&#xff1a; 两个对象A初始化时候会引用B&#xff0c;B 在初始化时会引用A&#xff0c;这个过程是怎么完成的&#xff1f; 代码示例&#xff1a; /*** 相互关联引用的初始化* author administrator**/ public class Interdependent {private TestClass test new Tes…

matlab+stm32通讯,matlab与stm32之间利用串口通信记录

1、涉及到的函数serial,fopen,fclose,instrfindall,instrhwinfo,fprintf,fscanf,fwrite,fread,isempty1.1 串口函数scom serial(com6,BaudRate,115200,BytesAvailableFcnMode,byte);fopen(scom);.fclose(scom);或者对串口属性单独设置&#xff0c;如下&#xff1a;scom seria…

德勤预测2018年9大科技趋势:AR走进普通用户,直播仍然是王道

来源&#xff1a;腾讯科技编辑&#xff1a;Jennie“我们眼下正处在一个临界点&#xff0c;即机器学习将在企业市场加速普及&#xff0c;从而推动改进企业运营&#xff0c;让企业作出更好的决策&#xff0c;并提供增强或全新的产品和服务。”——德勤副总裁保罗萨罗米据外媒报道…

Tomcat学习笔记(一)

HTTP 请求 一个HTTP请求包括三个组成部分&#xff1a;  方法—统一资源标识符(URI)—协议/版本  请求的头部  主体内容 下面是一个HTTP请求的例子&#xff1a; POST /examples/default.jsp HTTP/1.1 Accept: text/plain; text/html Accept-Language: en-gb Connection: K…

谷歌人工智能检索开普勒望远镜数据后,找到了“迷你太阳系”

“开普勒&#xff0d;90”和太阳系一样拥有八大行星 本文图片均来自 NASA来源&#xff1a;澎湃新闻概要&#xff1a;当地时间12月15日&#xff0c;美国国家航空航天局NASA宣布在“行星猎手”开普勒望远镜的数据库中找到了恒星“开普勒&#xff0d;90”周围的第八颗行星&#xf…

php去除所有标点符号的方法,php如何去除标点符号

php去除标点符号的方法&#xff1a;首先创建一个PHP示例文件&#xff1b;然后通过正则表达式“preg_replace($pattern, , $str);”删除字符串中的中英文标点符号即可。推荐&#xff1a;《PHP视频教程》php正则&#xff0c;删除字符串中的中英文标点符号原理很简单&#xff0c;…

JAVA监听器原理

来源&#xff1a;http://www.cnblogs.com/hulitut/archive/2012/03/27/2420414.html Java 最新的事件处理方法是基于授权事件模型 事件源生成事件并将其发送至一个或多个监听器监听器简单地等待&#xff0c;直到它收到一个事件。一旦事件被接受&#xff0c;监听器将处理这些事…

美国的人工智能企业在研发哪些有趣的AI产品?

来源&#xff1a;亿欧概要&#xff1a;本文盘点了美国AI企业的有趣产品&#xff0c;或许能给国内AI创业者和投资人有所启发。同样是AI创业&#xff0c;国内外的打法显然不同。在国内&#xff0c;大部分AI创业公司都在拼主赛道&#xff0c;比如无人驾驶、AI安防、AI医疗、AI教育…

mysql创建反弹函数,MySql创建函数

首先需要查看一下创建函数的功能是否开启&#xff1a;mysql> show variables like %func%;------------------------------------------------| Variable_name | Value |------------------------------------------------| log_bin_trust_funct…

Java技术回顾之JNDI--实例

一、JNDI在Java EE中的应用JNDI 技术是Java EE规范中的一个重要“幕后”角色&#xff0c;它为Java EE容器、组件提供者和应用程序之间提供了桥梁作用&#xff1a;Java EE容器同时扮演JNDI提供者角色&#xff0c;组件提供者将某个服务的具体实现部署到容器上&#xff0c;应用程序…