PHP中获取不到自定义header参数解决方案

一、概述

今天在通过PHP中获取自定义header参数时候,一直获取不到。

比如,获取header中USER_NAME参数,如下:

1

2

3

$curUser = isset($_SERVER['USER_NAME']) ? $_SERVER['USER_NAME'] : '未知';

 

echo $curUser;

通过curl模拟(关于curl的使用可以参考“linux下curl命令汇总”)请求如下:

1

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,大小写都可以。

所以上面的案例需要修改为:

1

2

$curUser = isset($_SERVER['HTTP_USER_NAME']) ? $_SERVER['HTTP_USER_NAME'] : '未知';

echo $curUser;

发送请求传递header的curl案例如下:

1

curl -v -H "host:test.findme.wang" -H "user-name:dequan" http://127.0.0.1/inedx.php

于是完美解决header获取不到的问题

posted @ 2022-11-11 15:42  狂客  阅读(403)  评论(0编辑  收藏  举报