php自定义请求headers,PHP中获取不到自定义header参数解决方案

本文详细分析了在PHP中无法获取自定义header参数的原因,主要涉及到PHP对header键值的自动转换规则,包括键名的大写转换和中划线转下划线。通过实例展示了如何正确设置和获取header参数,特别是对于含有特殊字符如下划线的情况。解决问题的关键在于理解PHP对header键的处理方式,并相应调整发送和接收两端的代码。
摘要由CSDN通过智能技术生成

一、概述

今天在通过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参数,但是接受页面却收不到,如下:

941bb133092657212b2681d9ac5f3f63.png

什么原因导致的呢?

首先PHP里,header的key会自动转为大写,其次,key只能包含字母、数字、中划线(-)。且,中划线(-)被自动转为下划线(_),所以获取的时候,需要注意。

所以:

如果,设置一个header的key为name,通过HTTP_NAME来获取

如果,设置一个header的key为user-name,通过HTTP_USER_NAME来获取

如果,设置一个header的key为http-user,通过HTTP_HTTP_NAME来获取,如下:

5fe60c31c51003b225a34ecebe67844b.png

那么:

如果,设置一个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获取不到的问题

4531f5891ea3afbab5c51d1436b73ab0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值