深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 363|回复: 0
打印 上一主题 下一主题

PHP如何解析header头部信息

[复制链接]

800

主题

1379

帖子

7704

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7704
跳转到指定楼层
楼主
发表于 2022-7-13 21:37:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PHP如何解析header头部信息


我们可以从$_SERVER这个全局变量中获取到。接下来我们来进行这个操作:
我们写一个简单的php文件测试一下:
  1. <?php
  2. // header.php

  3. var_dump($_SERVER);
  4. ?>
复制代码

在这里我的访问地址是: http://localhost/header.php
我们使用postman工具或者curl命令请求下这个地址,并加入我们自定义的一个头 token: 123456
  1. curl -H "token: 123456" http://localhost/header.php
复制代码

在输出中我们可以找到一项
  1. // ... 省略了好多

  2. ["HTTP_TOKEN"]=>
  3. string(6) "123456"

  4. // ... 省略了好多
复制代码

而这个HTTP_TOKEN就是我们想要的东西,我们传入的小写token, 在这里也转换成了大写。

我们再试一个,这次我们传递两个header:

  1. curl -H "test_token: 654321" -H "token: 123456" http://localhost/header.php
复制代码

测试发现,我们在输出中只找到了HTTP_TOKEN,缺没有找到我们预想的HTTP_TEST_TOKEN。不要着急,我们把下划线_换成连字符-试试:

  1. curl -H "test-token: 654321" -H "token: 123456" http://localhost/header.php
复制代码

看看输出,这下两个header都找到了。
  1. // ... 省略了好多

  2. ["HTTP_TEST_TOKEN"]=>
  3. string(6) "654321"
  4. ["HTTP_TOKEN"]=>
  5. string(6) "123456"

  6. // ... 省略了好多
复制代码

综上所述:传递header的键值,只能是单个词或者以中划线-连接的词。不然php会忽略。

好了接下来我们在实际应用中,只要把$_SERVER中的以HTTP_开头的下标都提取出来然后转换成首字母大写的格式就好了。

  1. <?php
  2. function parse_headers(){
  3.     $headers = [];
  4.     foreach ($_SERVER as $name => $value)
  5.     {
  6.         if (substr($name, 0, 5) == 'HTTP_')
  7.         {
  8.             $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
  9.         }
  10.     }
  11.     return $headers;
  12. }

  13. $headers = parse_headers();
  14. var_dump($headers);

  15. ?>
复制代码

看看输出:

  1. array(5) {
  2.   ["Host"]=>
  3.   string(9) "localhost"
  4.   ["User-Agent"]=>
  5.   string(11) "curl/7.65.3"
  6.   ["Accept"]=>
  7.   string(3) "*/*"
  8.   ["X-Token"]=>
  9.   string(6) "654321"
  10.   ["Token"]=>
  11.   string(6) "123456"
  12. }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-5 02:18 , Processed in 0.026143 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表