You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中WWWForm无法传递POST变量:单项目正常多项目异常问题求助

解决Unity WWWForm POST变量在PHP中为空的问题

看到你Postman测试正常但Unity请求拿不到$_POST值,大概率是请求格式或服务器配置的小细节出了问题,下面是一步步排查的实用思路:

1. 手动强制设置Content-Type请求头

虽然WWWForm理论上会自动生成application/x-www-form-urlencoded的Content-Type,但某些项目环境下可能没正确生效。你可以手动添加头,和Postman的请求保持一致:

IEnumerator GetClub() {
    Debug.Log("GetClub: - START");
    WWWForm form = new WWWForm();
    form.AddField("state", "TX");
    form.AddField("author", "MYNAME");
    UnityWebRequest res = UnityWebRequest.Post(getGlubsURL, form);
    // 手动指定Content-Type,确保服务器能正确解析表单
    res.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    yield return res.SendWebRequest();
    Debug.Log(res.downloadHandler.text);
}

2. 排查服务器端PHP的全局配置

有时候服务器的PHP设置会限制POST数据接收:

  • 检查php.ini里的post_max_size,确保值大于你的请求大小(你的请求很小,至少设成1M以上即可)
  • 检查upload_max_filesize,虽然你没传文件,但部分环境下这个参数会间接影响POST解析
  • 如果服务器用了mod_rewrite,确认Rewrite规则没有把POST请求转成GET,或者意外丢失了请求体

3. 抓包对比Unity和Postman的请求内容

这是最直接的排查方式,用Fiddler、Charles这类工具捕获Unity的请求,和Postman的请求做对比:

  • 查看两者的Content-Type是否完全一致
  • 检查请求体格式:Postman的表单请求体应该是state=TX&author=MYNAME,确认Unity发送的是不是同样的格式
  • 留意是否有重定向(HTTP 301/302),如果Unity自动跟进重定向,POST请求会被转为GET,自然拿不到$_POST值

4. 换一种POST构造方式测试

如果WWWForm的自动处理还是有问题,试试直接用字节数组构造请求体,绕开WWWForm的封装:

IEnumerator GetClub() {
    Debug.Log("GetClub: - START");
    string postData = "state=TX&author=MYNAME";
    byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData);
    UnityWebRequest res = UnityWebRequest.Post(getGlubsURL, "POST");
    res.uploadHandler = new UploadHandlerRaw(postBytes);
    res.downloadHandler = new DownloadHandlerBuffer();
    res.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    yield return res.SendWebRequest();
    Debug.Log(res.downloadHandler.text);
}

5. 服务器端用原始输入调试

在PHP里临时添加代码,直接读取原始请求体,确认Unity到底发了什么内容:

<?php
echo "MADE IT ";
// 读取原始请求体,判断数据是否真的传到了服务器
$rawInput = file_get_contents('php://input');
echo "Raw Input: [" . $rawInput . "] ";
echo "author: [" . $_POST['author'] . "] ";
echo "state: [" . $_POST['state'] . "]";
?>

如果Raw Input能看到state=TX&author=MYNAME但$_POST为空,说明服务器的PHP没有正确解析表单格式,要么是Content-Type头不对,要么是PHP的request_order配置里没包含POST。


内容的提问来源于stack exchange,提问作者justdan0227

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:47:48