一、概述
今天在通过PHP中获取自定义header参数时候,一直获取不到。
比如,获取header中USER_NAME参数,如下:$curUser = isset($_SERVER['USER_NAME']) ? $_SERVER['USER_NAME'] : '未知';
echo $curUser;
通过curl模拟(关于curl的使用可以参考“linux下curl命令汇总”)请求如下:curl -v -H "host:test.findme.wang" -H "USER_NAME:dequan" http://127.0.0.1/inedx.php
在请求头中,明明可以看到确实传递了USER_NAME:dequan参数,但是接受页面却收不到,如下:
什么原因导致的呢?
首先PHP里,header的key会自动转为大写,其次,key只能包含字母、数字、中划线(-)。且,中划线(-)被自动转为下划线(_),所以获取的时候,需要注意。
所以:
如果,设置一个header的key为name,通过HTTP_NAME来获取
如果,设置一个header的key为user-name,通过HTTP_USER_NAME来获取
如果,设置一个header的key为http-user,通过HTTP_HTTP_NAME来获取,如下:
那么:
如果,设置一个header的key为user_name ,则在PHP接受端是获取不到该header的,因为不支持下划线的可以。
如果,设置一个header的key为http_user,则
基于上面的内容,如果发送端的key为USER_NAME,则接收端是收不到的,只能改为user-name,大小写都可以。
所以上面的案例需要修改为:$curUser = isset($_SERVER['HTTP_USER_NAME']) ? $_SERVER['HTTP_USER_NAME'] : '未知';
echo $curUser;
发送请求传递header的curl案例如下:curl -v -H "host:test.findme.wang" -H "user-name:dequan" http://127.0.0.1/inedx.php
于是完美解决header获取不到的问题