php获取未解码之前的原始接口请求参数
前言
目前的几个项目,业务方基本都使用POST方式请求接口,我们本机磁盘会保留一份请求的原始参数用于请求分析和问题排查使用,一般有问题,也会基于seqid(请求唯一id)捞到日志,copy参数模拟请求看是否复现,但一直有个比较蛋疼的问题,PHP的
$_POST,$_GET,$_REQUEST这些获取参数的方法获取到的数据都是经过编码后的,到时copy后可能无法直接使用,最近有同学吐槽,决定还是解决一下。
网上搜索很多解决方式,有通过file_get_contents,php input和自定义的一些方法,试了下都不大靠谱,要么根本不解决问题,要么太复杂不够灵活,突然想到了$_SERVER,打印了一下:
[REQUEST_URI],[QUERY_STRING]这俩不就是请求的原始url和参数吗,,真是踏破铁鞋无觅处。。。
Array
(
[HOSTNAME] => 218c76b4dd62
[SEARCH_ENV_IP] => 127.0.0.1
[TERM] => xterm
[HISTSIZE] => 1000
[USER] => daemon
[LS_COLORS] => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;
[SEARCH_ENV_GROUP] => inner
[MAIL] => /var/spool/mail/root
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/php/bin
[PWD] => /data1/minisearch/discovery
[app_status] => dev
[LANG] => en_US.UTF-8
[HISTCONTROL] => ignoredups
[SHLVL] => 1
[HOME] => /sbin
[LOGNAME] => root
[SEARCH_ENV_IDC] => inner
[_] => /usr/local/php/sbin/php-fpm
[OLDPWD] => /data1/minisearch/magent
[HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_ACCEPT] => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
[HTTP_USER_AGENT] => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
[HTTP_UPGRADE_INSECURE_REQUESTS] => 1
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_CONNECTION] => keep-alive
[HTTP_HOST] => 127.0.0.1:8088
[REDIRECT_STATUS] => 200
[SERVER_NAME] =>
[SERVER_PORT] => 80
[SERVER_ADDR] => 172.17.0.19
[REMOTE_PORT] => 62909
[REMOTE_ADDR] => 10.222.64.22
[SERVER_SOFTWARE] => nginx/1.15.8
[GATEWAY_INTERFACE] => CGI/1.1
[REQUEST_SCHEME] => http
[SERVER_PROTOCOL] => HTTP/1.1
[DOCUMENT_ROOT] => /data1/openresty/htdocs
[DOCUMENT_URI] => /api/test.php
[REQUEST_URI] => /api/test.php?stream_entry_id=0&wb_version=6164&bigday_max_enable=1&containerid=100103type%3D1%26q%3D%23%E9%B4%8A%E8%B4%A4%E6%B5%8B%E8%AF%95%E6%91%84%E6%94%BF%E8%AF%9D%E9%A2%9802%23%26t%3D4&&ignore_inturrpted_error=true
[CONTENT_LENGTH] =>
[CONTENT_TYPE] =>
[REQUEST_METHOD] => GET
[QUERY_STRING] => stream_entry_id=0&wb_version=6164&bigday_max_enable=1&containerid=100103type%3D1%26q%3D%23%E9%B4%8A%E8%B4%A4%E6%B5%8B%E8%AF%95%E6%91%84%E6%94%BF%E8%AF%9D%E9%A2%9802%23%26t%3D4&&ignore_inturrpted_error=true
[PATH_INFO] =>
[SCRIPT_NAME] => /api/test.php
[SCRIPT_FILENAME] => /www/api/test.php
[FCGI_ROLE] => RESPONDER
[PHP_SELF] => /api/test.php
[REQUEST_TIME_FLOAT] => 1683629478.9321
[REQUEST_TIME] => 1683629478
)
结语
这么简单的问题,拖这么久也是服了自己,还想着在nginx阶段做处理,也是个大大的无语。
php获取未解码之前的原始接口请求参数的更多相关文章
- python接口自动化26-参数关联和JSESSIONID(上个接口返回数据作为下个接口请求参数)
前言 参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了. 最常见的案例就是网站的登录案例,很多网站的登录并不仅 ...
- go中处理各种请求方式以及处理接口请求参数
话不多说直接上代码,解读内容全部在代码中 1.处理请求方式 package main import ( "fmt" "io/ioutil" "net/ ...
- 利用 Bean Validation 来简化接口请求参数校验
团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...
- 【转】js生成接口请求参数签名加密
js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...
- js生成接口请求参数签名加密
js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...
- httprunner学习3-extract提取token值参数关联(上个接口返回的token,传给下个接口请求参数)
前言 如何将上个接口的返回token,传给下个接口当做请求参数?这是最常见的一个问题了. 解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了.那么接下 ...
- vue写请求接口--请求参数的变量要在return里面声明
//谨记return里面是返回所有声明的变量的名字,数组以及对象等等 export default { data () { return { //所有的变量都是写在data 的return里面的,主要 ...
- Request.getparameternames 获取form表单里面所有的请求参数 。 返回一个Enumeration类型的枚举.
通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值. 最后通过request.g ...
- jmeter完成md5加密的接口请求参数
第一种方法: 这种方法比较简单,jmeter内置了一个md5的函数,可以直接使用.其中参数username是用户名,正常填写,password是密码经过md5加密 第二种方法: 需要有一定的编程技术, ...
- SpringMVC 获取请求参数
1.获取Request response对象 在SpringMVC的注解开发中,可以选择性的接收Request和Response对象来使用 2.获取request对象请求参数 a.通过request对 ...
随机推荐
- 1.java基本语法
一.数据和数据类型 (一)标识符:给变量.常量.方法类.对象等命名的符号 (二)变量和常量 1.变量:值在运行时可以改变的量: 每个变量属于特定的数据类型,使用前要先声明,然后赋值,初始化或赋值后才能 ...
- 后端004-JWT工具类的编写
登录功能采用springsecurity安全框架和jwt令牌 首先需要添加依赖信息 在yml中添加JWT的配置文件 有了上述的配置之后,我们可以准备一个JWT的工具类,方便后面和JWT相关的内容去使用 ...
- tornado cgi wsgi uwsgi之间的关系
Tornado可以当作HTTP server,直接TCP开始实现HTTP服务,这也就是为啥说Tornado可以不经过WSGI.实际上它也不是CGI. CGI是指通过stdin和stdout进行HTTP ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——11.MBR介绍
学习操作系统原理最好的方法是自己写一个简单的操作系统. 前面我们介绍过电脑的启动过程: 上电->BIOS->MBR(boot)->loader->kernel->交互界面 ...
- 解放AI生产力——ComfyUI
最近状态不好,所以这几天基本没干什么,就分享一下和AI绘画工作流有关的东西吧. 此前我都没有抱着一种教学的心态来写博客,因为我所掌握的东西实在太过简单,只要一说大家就会了,我害怕我在人群里失去自己的特 ...
- C++ 用户输入验证
在编写程序时,请考虑用户将如何滥用您的程序,尤其是在文本输入方面.对于每个文本输入点,请考虑: 会不会提取失败? 用户可以输入比预期更多的输入吗? 用户可以输入无意义的输入吗 用户可以溢出输入吗? 以 ...
- 构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)
毋庸讳言,和传统架构(BS开发/CS开发)相比,人工智能技术确实有一定的基础门槛,它注定不是大众化,普适化的东西.但也不能否认,人工智能技术也具备像传统架构一样"套路化"的流程,也 ...
- python实现员工信息表
学习python时,看到的一个题目第一次写博客, 有误的地方还请大佬们指正,十分感谢~要求如下'''文件存储格式如下:id,name,age,phone,job(这行不需要写)1,alice,22,1 ...
- 为kubernetes(k8s)单独配置kubectl工具
介绍 Kubernetes API 是一个 HTTP REST API.这个 API 是真正的 Kubernetes 用户界面,通过它可以完全控制它.这意味着每个 Kubernetes 操作都作为 A ...
- 【论文阅读笔记】Class-Incremental Learning with Strong Pre-trained Models
Key_words: Continual learning, strong pretrained model, fix, fusion Create_time: April 14, 2022 6:32 ...