php获取未解码之前的原始接口请求参数

这篇具有很好参考价值的文章主要介绍了php获取未解码之前的原始接口请求参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

目前的几个项目,业务方基本都使用POST方式请求接口,本机磁盘会保留一份请求的原始参数用于请求分析和问题排查使用,一般有问题,也会基于seqid(请求唯一id)捞到日志,copy参数模拟请求看是否复现,但一直有个比较蛋疼的问题,PHP的$_POST$_GET$_REQUEST这些获取参数的方法获取到的数据都是经过编码后的,到时copy后可能无法直接使用,最近有同学吐槽,决定还是解决一下。

原文地址:https://www.ngxcode.com/archives/514.html

网上搜索很多解决方式,有通过file_get_contents,php input和自定义的一些方法,试了下都不大靠谱,要么根本不解决问题,要么太复杂不够灵活,突然想到了$_SERVERG$_GLOBALS打印了一下:

$_SERVER['REQUEST_URI']:请求地址,GET请求会同时带上url及地址内的参数
$_SERVER['QUERY_STRING']:请求参数,但只限于GET方式请求,POST无法获取到
$_GLOBALS['_POST']: POST请求参数
$_GLOBALS['_GET']: GET请求参数

以上获取到的参数都为未编码的原始参数信息。

$_SERVER

Array
(
    [HOSTNAME] => 10.93.50.82
    [SEARCH_ENV_IP] => 10.93.50.82
    [TERM] => xterm
    [HISTSIZE] => 1000
    [SEARCH_ENV_ENV] => online
    [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;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;'
    [SEARCH_ENV_GROUP] => aliyun
    [MAIL] => /var/spool/mail/root
    [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/php/bin
    [PWD] => /api
    [HISTCONTROL] => ignoredups
    [SHLVL] => 1
    [HOME] => /sbin
    [LOGNAME] => root
    [SEARCH_ENV_IDC] => aliyun
    [_] => /usr/local/php/sbin/php-fpm
    [OLDPWD] => /data1/minisearch/magent
    [HTTP_CONTENT_LENGTH] => 10140
    [HTTP_CONTENT_TYPE] => multipart/form-data; boundary=--------------------------309935001928920506739539
    [HTTP_CONNECTION] => keep-alive
    [HTTP_ACCEPT_ENCODING] => gzip, deflate, br
    [HTTP_HOST] => 10.93.80.88
    [HTTP_POSTMAN_TOKEN] => 7d97975a-bbd6-425c-8b8a-ad96a58c896e
    [HTTP_ACCEPT] => '*/*'
    [HTTP_USER_AGENT] => PostmanRuntime/7.29.2
    [REDIRECT_STATUS] => 200
    [SERVER_NAME] => 
    [SERVER_PORT] => 80
    [SERVER_ADDR] => 10.93.50.82
    [REMOTE_PORT] => 52515
    [REMOTE_ADDR] => 10.221.64.22
    [SERVER_SOFTWARE] => nginx/1.19.3
    [GATEWAY_INTERFACE] => CGI/1.1
    [REQUEST_SCHEME] => http
    [SERVER_PROTOCOL] => HTTP/1.1
    [DOCUMENT_ROOT] => /www/test
    [DOCUMENT_URI] => /apitest/mi.php
    [REQUEST_URI] => /apitest/mi.php?apitest=1
    [CONTENT_LENGTH] => 10140
    [CONTENT_TYPE] => multipart/form-data; boundary=--------------------------309935001928920506739539
    [REQUEST_METHOD] => POST
    [QUERY_STRING] => apitest=1
    [PATH_INFO] => 
    [SCRIPT_NAME] => /apitest/mi.php
    [SCRIPT_FILENAME] => /www/test/apitest/mi.php
    [FCGI_ROLE] => RESPONDER
    [PHP_SELF] => /apitest/mi.php
    [REQUEST_TIME_FLOAT] => 1683703077.2267
    [REQUEST_TIME] => 1683703077
)

$_GLOBALS

Array
(
    [_GET] => Array
        (
            [apitest] => 1
        )

    [_POST] => Array
        (
            [stream_entry_id] => 30
            [wb_version] => 6164
            [v_p] => 90
            [flowId] => 100103type%3D1%26q%3D%23%E6%9D%A8%E6%B4%8B%E7%8E%8B%E6%A5%9A%E7%84%B6%E6%81%8B%E6%83%85%23%26t%3D3
        )

    [_COOKIE] => Array
        (
        )

    [_FILES] => Array
        (
        )
    [_SERVER] => Array
        (
            [HOSTNAME] => 10.93.50.82
            [SEARCH_ENV_IP] => 10.93.50.82
            ...
        )

    [_REQUEST] => Array
        (
            [apitest] => 1
            [stream_entry_id] => 30
         	...
        )
)

结语

真是踏破铁鞋无觅处。。合理使用PHP服务器和全局变量,很多问题其实没有那么麻烦,拖这么久处理,还想着在nginx阶段做处理,也是个大大的无语。文章来源地址https://www.toymoban.com/news/detail-437440.html

到了这里,关于php获取未解码之前的原始接口请求参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 使用【AOP 切面+注解】实现在请求调用 Controller 方法前修改请求参数和在结果返回之前修改返回结果

    在项目中需要实现 在请求调用 Controller 方法前修改请求参数和在结果返回之前修改返回结果 。 我们可以使用 AOP 切面+注解的形式实现。这样我们就可以在不修改原始代码的情况下,通过切面类在方法调用前后插入额外的逻辑。 自定义注解 @PreProcess 自定义注解 @PreProcess 用于

    2024年03月20日
    浏览(45)
  • WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver

    很多时候,上层app需要获取RTC中的音频数据,比如获取RTC麦克风采集的裸数据、扬声器播放的混音之后的裸数据,再比如麦克风和扬声器混音后的裸数据等等。 在实时音视频中,用户可以对采集到的音频数据进行前处理和后处理,获取自己想要的播放效果,例如变音、录音等

    2023年04月16日
    浏览(48)
  • PHP:接口请求与被请求

    2024年04月25日
    浏览(40)
  • php使用guzzle http发送并发接口请求

    在 PHP 中, Guzzle 是一个功能强大且流行的 HTTP 客户端,提供了方便的接口来发送 HTTP 请求并处理响应,本人非常喜欢这个包且重度依赖。 以下是使用 Guzzle 发送并发请求的基本示例: 

    2024年01月16日
    浏览(49)
  • SpringMVC之获取请求参数

    下面用到了thymeleaf,不知道的可以看我同专栏里的搭建框架这篇文章。 将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。 在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映

    2024年02月12日
    浏览(43)
  • 34.SpringMVC获取请求参数

    将 HttpServletRequest 作为 控制器方法的形参 ,此时HttpServletRequest类型的参数表示 封装了当前请求 的请求报文的对象 index.html TestParamController.java 成功获取到表单提交的信息,这是采用原生Servlet的方式获取 在控制器方法的形参位置, 设置和请求参数同名的形参 ,当浏览器发送

    2024年02月12日
    浏览(41)
  • SpringMVC-获取请求参数

    用户输入信息后,如果想要得到用户输入的内容 , springMVC 应该如何做呢? 本次课讲解下再springmvc中获取请求参数及中文乱码问题 通过servletAPI获取 讲HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 通过控制器方法的形

    2024年01月21日
    浏览(46)
  • SpringMVC获取请求参数

    将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参 注: 若请求所

    2024年02月08日
    浏览(38)
  • SpringMVC(三)获取请求参数

    SpringMVC封装的就是原生的servlet 我们进行测试如下所示: 我们的登陆页面如下所示:  点击登录之后,即会跳转到成功界面。 同时我们的控制台会进行输出:username:admin,password:123456 我们的页面如下所示: 我们进行如下界面: 我们点击登陆之后,会跳转到成功界面, 此时控

    2024年02月08日
    浏览(37)
  • php 接口请求一次,controller调用了两次。

    这几天开发一个数据导出功能 由于是数据导出,所以有点慢。然后发现一个问题,前端只请求一次,controller却收到了两次请求。而且第二次请求i必定失败 这就悲催了。脑子懵懵的! 由于我这就是个小活儿,于是环境就是使用的nginx+fastcgi 网上搜索了一圈,大多都是说跨域的

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包