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
相关产品推荐
相关产品推荐

