前言
目前的幾個項目,業(yè)務(wù)方基本都使用POST方式請求接口,本機磁盤會保留一份請求的原始參數(shù)用于請求分析和問題排查使用,一般有問題,也會基于seqid(請求唯一id)撈到日志,copy參數(shù)模擬請求看是否復(fù)現(xiàn),但一直有個比較蛋疼的問題,PHP的
$_POST
,$_GET
,$_REQUEST
這些獲取參數(shù)的方法獲取到的數(shù)據(jù)都是經(jīng)過編碼后的,到時copy后可能無法直接使用,最近有同學(xué)吐槽,決定還是解決一下。
原文地址:https://www.ngxcode.com/archives/514.html
網(wǎng)上搜索很多解決方式,有通過file_get_contents,php input和自定義的一些方法,試了下都不大靠譜,要么根本不解決問題,要么太復(fù)雜不夠靈活,突然想到了$_SERVERG
和$_GLOBALS
打印了一下:
$_SERVER['REQUEST_URI']
:請求地址,GET請求會同時帶上url及地址內(nèi)的參數(shù)$_SERVER['QUERY_STRING']
:請求參數(shù),但只限于GET方式請求,POST無法獲取到$_GLOBALS['_POST']:
POST請求參數(shù)$_GLOBALS['_GET']:
GET請求參數(shù)
以上獲取到的參數(shù)都為未編碼的原始參數(shù)信息。文章來源:http://www.zghlxwxcb.cn/news/detail-437440.html
$_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
...
)
)
結(jié)語
真是踏破鐵鞋無覓處。。合理使用PHP服務(wù)器和全局變量,很多問題其實沒有那么麻煩,拖這么久處理,還想著在nginx階段做處理,也是個大大的無語。文章來源地址http://www.zghlxwxcb.cn/news/detail-437440.html
到了這里,關(guān)于php獲取未解碼之前的原始接口請求參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!