前言

目前的几个项目,业务方基本都使用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获取未解码之前的原始接口请求参数的更多相关文章

  1. python接口自动化26-参数关联和JSESSIONID(上个接口返回数据作为下个接口请求参数)

    前言 参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了. 最常见的案例就是网站的登录案例,很多网站的登录并不仅 ...

  2. go中处理各种请求方式以及处理接口请求参数

    话不多说直接上代码,解读内容全部在代码中 1.处理请求方式 package main import ( "fmt" "io/ioutil" "net/ ...

  3. 利用 Bean Validation 来简化接口请求参数校验

    团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...

  4. 【转】js生成接口请求参数签名加密

    js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...

  5. js生成接口请求参数签名加密

    js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...

  6. httprunner学习3-extract提取token值参数关联(上个接口返回的token,传给下个接口请求参数)

    前言 如何将上个接口的返回token,传给下个接口当做请求参数?这是最常见的一个问题了. 解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了.那么接下 ...

  7. vue写请求接口--请求参数的变量要在return里面声明

    //谨记return里面是返回所有声明的变量的名字,数组以及对象等等 export default { data () { return { //所有的变量都是写在data 的return里面的,主要 ...

  8. Request.getparameternames 获取form表单里面所有的请求参数 。 返回一个Enumeration类型的枚举.

    通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值. 最后通过request.g ...

  9. jmeter完成md5加密的接口请求参数

    第一种方法: 这种方法比较简单,jmeter内置了一个md5的函数,可以直接使用.其中参数username是用户名,正常填写,password是密码经过md5加密 第二种方法: 需要有一定的编程技术, ...

  10. SpringMVC 获取请求参数

    1.获取Request response对象 在SpringMVC的注解开发中,可以选择性的接收Request和Response对象来使用 2.获取request对象请求参数 a.通过request对 ...

随机推荐

  1. (Linux)不挂断启动进程

    环境:腾讯云Ubuntu x86_64 问题:在配置应用时,需要让他后台启动,关闭ssh连接也要可以保持后台运行 解决办法: 1.使用nohup 参考链接:https://zhuanlan.zhihu ...

  2. HTTP 协议相关

    一. HTTP常见请求头 1. Host (主机和端口号) 2. Connection (连接类型) 3.Upgrade-Insecure-Requests (升级为HTTPS请求) 4. User- ...

  3. c# Visual Studio|There is no editor available for ***,make sure the application for the file type(.vb) is installed问题解决方法

    这个问题出现在在使用VS编码当中,电脑意外关机,导致的文件的缺失或者损坏. 使用反编译软件(如:ILSpy)对编译后的 .EXE文件进行反编译,在翻遍的结果中将相关代码拷贝至目标路径下,替换所需文件. ...

  4. MyCat中间件的坑

    首先说一下为什么选择MyCat,mysql分表分库的工具还有sharding-jdbc,是jar包的形式集成到项目的,可以相对灵活的配置自定义分片策略(PS:其实大部分业务场景是分片策略越简单越好啊, ...

  5. Windows10系统快速安装.NET Framework3.5的方法&常见问题处理方法

    Windows10系统快速安装.NET Framework3.5的方法&常见问题处理方法 因为我的win10想了办法来禁止自动更新,就无法照正常办法安装.NET Framework3.5,解决 ...

  6. Java笔记第二弹

    List常用集合子类的特点 ArrayList底层数据结构是数组 查询快,增删慢 LinkedList底层数据结构是链表 查询慢,增删快 练习: //ArrayList实现 import java.u ...

  7. 安装node.js教程------深入使用Vue

    教程 1.下载nodejs引擎 网址:https://nodejs.org/en/download/ 选择32-bit或者64-bit都行 2.下载最新版npm.zip压缩包 网址:http://no ...

  8. AI 影评家:用 Hugging Face 模型打造一个电影评分机器人

    本文为社区成员 Jun Chen 为 百姓 AI 和 Hugging Face 联合举办的黑客松所撰写的教程文档,欢迎你阅读今天的第二条推送了解和参加本次黑客松活动.文内含有较多链接,我们不再一一贴出 ...

  9. mybatisplus数据层标准开发---分页功能

    1.创建一个拦截器类 package com.itheima.config; import com.baomidou.mybatisplus.extension.plugins.MybatisPlus ...

  10. Vue+ElementUI动态显示el-table某列(值和颜色)的方法

    方法一:结合 template scope组件和 v-if 语法判断 例1:值 <el-table-column prop="status" label="车辆状态 ...