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

向本地服务器POST请求时接收空字符串的问题排查

问题原因及解决方案

核心问题

你用WebClient.UploadValues发送请求时,它默认会把NameValueCollection的数据编码成application/x-www-form-urlencoded格式,并设置对应的请求头。而PHP在接收到这种格式的POST请求时,会自动将数据解析到$_POST全局数组中,同时清空php://input的内容——这就是你获取到空字符串的原因。

解决方案一:PHP端直接使用$_POST获取数据

修改PHP接收代码,直接从$_POST中读取参数,无需读取php://input:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'] ?? null;
    $password = $_POST['password'] ?? null;
    
    var_dump($username);
    var_dump($password);
}
else {
    http_response_code(405);
    echo "Это не POST";
}
?>

解决方案二:修改C#发送方式,适配php://input读取

如果你坚持要通过php://input获取数据,需要修改C#代码,手动构造url编码的字符串,并用UploadString发送,同时指定正确的Content-Type:

using (var wb = new WebClient())
{
    wb.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    string postData = "username=myUser&password=myPassword";
    // 若参数包含特殊字符,用UrlEncode处理:
    // string postData = $"username={Uri.EscapeDataString("myUser")}&password={Uri.EscapeDataString("myPassword")}";
    var response = wb.UploadString(url, "POST", postData);
    Console.WriteLine(response);
}

此时PHP端原代码即可正常获取到php://input的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:13:16