You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Fetch发送POST请求但后端PHP识别为GET请求的问题求助

Fetch发送POST请求但后端PHP识别为GET请求的问题求助

我现在卡了好几个小时,遇到个离谱的问题:明明用JS的Fetch发送了POST请求,后端PHP却一直显示这是GET请求😭 我对PHP和JS都不太熟,大概率是哪里犯了低级错误,求大佬帮忙看看!

前端Fetch请求代码

这是我写的前端发送请求的JS代码,明确指定了method为POST,还用了application/x-www-form-urlencoded的Content-Type,参数用URLSearchParams包装了:

const fullusername = "<?php echo $to; ?>";
const personontheline = sessionStorage.getItem('name');
fetch('inc/AI2.php', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
        fullname: fullusername, //变量
        personwhoclicked: personontheline //变量
    }) //后续还有Fetch的错误处理,不过目前主要问题在请求方法上

后端PHP的请求判断逻辑

后端我用$_SERVER['REQUEST_METHOD']来判断请求类型,但它一直返回GET,直接走到了错误分支,输出"Invalid request GET":

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //要执行的逻辑
    }
} else {
    // 处理非法请求
    echo "Invalid request       ".$_SERVER['REQUEST_METHOD'];
    die();
}

我尝试过的修改

我试着把Fetch的method改成GET,这时候后端能识别是GET请求了,但又读不到GET参数,代码会输出"error":

if (isset($_GET['fullname']) AND isset($_GET['personwhoclicked'])) { 
    //这里的逻辑能执行
} 
else{ 
    echo "error"; 
}   

Burp Suite抓包结果

这是POST请求时Burp Suite的抓包截图:
POST请求抓包结果

这是GET请求时的抓包截图:
GET请求抓包结果

实在搞不懂哪里出问题了,明明指定了POST方法,为啥后端认成GET?改成GET又读不到参数,已经折腾好几个小时了,求指点!

备注:内容来源于stack exchange,提问作者Martello

火山引擎 最新活动