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

使用TIdHTTP发送POST请求时JSON响应读取挂起的问题及疑问

Delphi TIdHTTP POST请求挂起问题排查与解决方案

问题场景与现象

  • 开发环境:Delphi应用,需与本地服务器进行含JSON内容的HTTP GET/POST请求及响应交互
  • 异常触发:第三方服务器升级新版本后,执行IdHTTP.Post("URL", "Payload", "BytesStreamResult");语句时应用出现挂起

排查过程

  1. 对比验证:通过Postman手动发送相同请求可正常获取响应,确定问题出在Delphi客户端
  2. 细节定位:HTTP POST请求已成功获取HTTP 200响应及合法响应头,但读取响应体时卡在IOHandler.ReadLn语句
  3. 响应头对比:发现Delphi端收到的响应缺少Transfer-Encoding: chunked字段,而Postman能正常获取该字段

解决方案

问题根源在于TIdHTTP的hoKeepOrigProtocol选项默认未启用,导致POST请求被降级为HTTP 1.0协议;升级后的服务器仅支持HTTP 1.1的chunked编码响应,因此客户端无法正确读取响应体。启用该选项后,请求保持HTTP 1.1协议,可正常读取chunked编码的响应,应用恢复正常。

疑问

  1. hoKeepOrigProtocol是否应设为默认选项?
  2. 能否拦截此类问题?当前POST请求预设流式响应,因服务器未向缓冲区写入内容而挂起,且无超时处理会导致永久挂起,相关高层代码应如何实现?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:55:21