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

HTTPClient.Get返回12002超时错误,浏览器正常请求异常排查

问题场景

目标Host为https://api.ipify.org/的Delphi HTTP请求函数,代码如下:

TRespEx=record
 Resp:IHttpResponse;
 EError:String
 end;

function CheckIp(UseProxy: Boolean = True; Host: String = ipcheck;
  ProxyHost: String = '127.0.0.1'; ProxyPort: Integer = 9090): TRespEx;
var
  Cli: THttpClient;
begin
  Cli := THTTPClient.Create;
  Cli.SecureProtocols := [THTTPSecureProtocol.SSL2, THTTPSecureProtocol.SSL3,
                          THTTPSecureProtocol.TLS1, THTTPSecureProtocol.TLS11,
                          THTTPSecureProtocol.TLS12, THTTPSecureProtocol.TLS13];
  try
    try
      if UseProxy = True then Cli.ProxySettings.Create(ProxyHost, ProxyPort);
      Cli.SetUserAgent(PUserAgent);
      Result.Resp := Cli.Get(Host);
    except
      on E: Exception do
        Result.EError := E.Message;
    end;
  finally
    Cli.Free;
  end;
end;

该函数原本在UseProxy=False(不使用代理)时运行正常,近期突然抛出超时异常:

Error sending data: (12002) The operation time out

已知条件:

  • 未修改任何代码
  • UseProxy=True时函数仍可正常工作
  • 目标Host可通过浏览器正常访问
  • PUserAgent已复制自浏览器
  • 已关闭杀毒软件和防火墙

可能的原因及解决思路

1. 系统默认代理被静默配置

虽然代码指定UseProxy=False,但Windows系统可能被自动设置了全局代理(如软件后台配置、系统更新强制设置),导致THttpClient在无代码指定代理时仍尝试使用系统代理,而该代理不可用引发超时。

  • 解决思路:
    • 检查系统Internet选项中的代理设置,确认是否存在自动配置脚本或手动代理
    • 当UseProxy=False时,在代码中显式禁用系统代理:添加Cli.ProxySettings.Enabled := False;,避免THttpClient自动读取系统代理

2. THttpClient默认超时设置过短

THttpClient默认超时可能偏短,当网络环境波动(如目标服务器响应变慢、本地网络路由变化)时,无代理路径的请求触发超时,而代理路径可能有缓存或不同路由,响应速度更快。

  • 解决思路:
    • 显式设置更长的超时时间,例如Cli.Timeout := 10000;(10秒),覆盖默认值
    • 精细化控制超时:分别设置Cli.ConnectionTimeout(连接超时)和Cli.ResponseTimeout(读取超时)

3. 本地DNS解析异常

浏览器可能使用自定义DNS(如Chrome安全DNS),而THttpClient依赖系统默认DNS,当系统DNS无法正确解析api.ipify.org时,导致连接超时;代理服务器则使用了正常的DNS解析路径。

  • 解决思路:
    • 手动测试DNS解析:打开命令提示符执行nslookup api.ipify.org,检查返回IP是否正常
    • 直接使用目标Host的IP地址发起请求,验证是否为DNS问题
    • 刷新系统DNS缓存:执行ipconfig /flushdns

4. SSL/TLS协议兼容性问题

代码中启用了所有SSL/TLS协议,但目标服务器近期可能调整了支持的协议版本,无代理路径下的协议协商失败导致超时;代理可能自动适配了正确的协议版本。

  • 解决思路:
    • 简化SSL协议列表,仅保留主流TLS版本:Cli.SecureProtocols := [THTTPSecureProtocol.TLS12, THTTPSecureProtocol.TLS13];,移除老旧的SSL2/SSL3/TLS1/TLS11
    • 确认目标服务器支持的TLS版本,匹配代码中的协议设置

5. 本地网络路由表异常

无代理请求的路由路径出现故障(如本地网关、ISP路由节点问题),而代理请求走了不同的路由路径(如代理服务器有独立出口线路)。

  • 解决思路:
    • 执行tracert api.ipify.org(无代理时),查看路由跳转是否存在超时节点
    • 切换网络环境(如手机热点),验证是否为当前网络的路由问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:50:30