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

C#使用HttpWebRequest发POST时头部出现异常字符报404问题求助

问题原因及解决方案

1 最可能原因:分块传输编码被自动启用

你看到的9位可变字符是HTTP分块传输的块长度前缀,为十六进制数值,会随请求体长度变化。
触发原因:你的_SetHeader方法仅手动添加了Content-Length请求头,没有给HttpWebRequest的ContentLength属性赋值。HttpWebRequest的内置逻辑会忽略手动添加的Content-Length头,只要没有显式给ContentLength属性赋值,就会自动启用分块传输,给请求体附加块长度前缀、结束标记,不支持分块传输的服务端会将前缀识别为请求报文的一部分,无法正确解析POST方法,返回404。

修复方案:

// 直接给ContentLength属性赋值,不要手动加Content-Length头
_req.ContentLength = _postData.Length;
// 显式关闭分块传输,避免框架自动启用
_req.SendChunked = false;

2 次要原因:TCP连接复用的残留数据

HttpWebRequest默认开启Keep-Alive复用TCP连接,如果上一次请求的响应没有被完全读取(比如服务端返回了Gzip/Deflate压缩数据但你没有做解压缩处理),残留的响应数据会被拼接到下一次请求的开头。

修复方案:

先通过关闭连接复用验证问题是否消失:

_req.KeepAlive = false;

如果问题消失,说明是响应读取不完整导致,添加自动解压缩配置即可:

_req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

3 排查方向:_SetHeader方法异常

检查_SetHeader方法的实现逻辑,确认是否存在错误写入字节到请求流、错误修改请求配置的问题。

补充建议

HttpWebRequest属于微软官方标记为过时的API,新项目推荐使用HttpClient处理HTTP请求,可规避绝大多数底层配置问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 19:48:03