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

C# HttpClient Post请求发送至Java Servlet时内容为空问题排查

问题:C# HttpClient 发送Post请求至Java Servlet,服务器接收内容为空

问题详情

使用C#的HttpClient向Java Servlet引擎发送Post请求,请求能成功到达服务器,但服务器读取到的请求内容为空,引发报错。该Servlet接口使用VBA代码请求时可正常工作。

C# 客户端请求代码

string loginBuffer = "test";
HttpClient hClient = GetClient();
using StringContent loginString = new StringContent(loginBuffer, UnicodeEncoding.UTF8, "application/text");
var response1 = await hClient.PostAsync(new Uri("https://sampleserver.com/Login"), loginString);

Java Servlet 服务端读取内容代码

protected StringBuffer getRequestBuffer(ServletRequest request) throws IOException 
{
    StringBuffer sb = null;
    try
    {
        sb = new StringBuffer();
        BufferedReader br = request.getReader();
        String line = new String();
        line = br.readLine();
        // 后续读取逻辑省略
    }
    // 异常处理省略
}

可正常工作的VBA请求代码

Dim res As String 
res = "" 

If req Is Nothing Then 
        Set req = New WinHttp.WinHttpRequest 
End If 

req.SetTimeouts 1800000, 1800000, 1800000, 1800000 
m_serverURL = getserverurl 
req.Open "POST", m_serverURL & "/" & Service, False 
req.setRequestHeader "Content-Length", "" & VBA.Len(buffer) 
req.setRequestHeader "X-client", "WinExcel" 
req.Send buffer

问题原因及解决方法

原因1:Content-Type 非标准类型

C#代码中指定的application/text不是标准MIME类型,标准文本类型应为text/plain。VBA代码未显式设置Content-Type,WinHttp默认使用的类型(如text/plain或application/x-www-form-urlencoded)能被Servlet正常识别,这是两者的核心差异。

原因2:编码与请求头差异

UnicodeEncoding.UTF8生成的是带BOM的UTF-8编码,而VBA默认使用不带BOM的编码,可能导致Servlet解析异常。此外,HttpClient自动处理Content-Length,若Servlet对该头的校验逻辑严格,也可能引发读取问题。

解决步骤

  1. 修正Content-Type为标准值
    将StringContent的MIME类型改为text/plain,同时使用不带BOM的Encoding.UTF8:

    using StringContent loginString = new StringContent(loginBuffer, Encoding.UTF8, "text/plain");
    
  2. 对齐VBA的请求头配置
    参考VBA代码添加相同的自定义请求头,确保请求特征一致:

    loginString.Headers.Add("X-client", "WinExcel");
    
  3. 检查Servlet读取逻辑
    确认Servlet中未在调用getReader()前读取过请求输入流(如调用getInputStream()),两种读取方式互斥,会导致其中一种无法获取内容。需统一使用一种方式读取请求体。

内容的提问来源于stack exchange,提问作者Robo-SC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:45:04