Yellowfin Delphi API集成:RESTRequest右键正常但代码执行连接失败
以下是针对你遇到的「设计时右键执行RESTRequest正常,代码调用RESTRequest1.Execute却报12029连接失败」问题的排查方向和解决方法:
核对运行时的BaseURL配置
设计时IDE使用的是静态配置,但程序运行时可能存在代码覆盖BaseURL、变量未替换(比如环境变量、动态拼接路径)的情况。在Execute前添加日志或弹窗确认当前URL:ShowMessage(RESTClient1.BaseURL); // 对比设计时的URL是否完全一致若不一致,检查是否有其他代码修改了
RESTClient1.BaseURL,确保运行时URL和设计时完全匹配。统一代理设置
IDE和Postman可能自动使用系统代理,而Delphi程序默认可能未启用。开启系统代理支持:RESTClient1.ProxySettings.UseSystemProxy := True;若Yellowfin服务器需要自定义代理,手动配置
ProxySettings的Server、Port、Username和Password属性。修复SSL/TLS版本兼容性
设计时IDE的SSL库可能支持更高版本的TLS,而程序运行时默认配置无法匹配Yellowfin服务器的要求。手动指定TLS版本:if Assigned(RESTClient1.SSLIOHandler) and (RESTClient1.SSLIOHandler is TIdSSLIOHandlerSocketOpenSSL) then begin with TIdSSLIOHandlerSocketOpenSSL(RESTClient1.SSLIOHandler).SSLOptions do begin SSLVersions := [sslvTLSv1_2, sslvTLSv1_3]; end; end;同时确保程序目录下存在对应Indy版本的SSL动态库(如
libcrypto-1_1-x64.dll、libssl-1_1-x64.dll),版本过低会导致SSL握手失败。排查权限与防火墙拦截
程序运行时的权限可能低于IDE,导致被系统防火墙或杀毒软件拦截。尝试:- 以管理员身份运行程序
- 在系统防火墙中添加程序的网络访问允许规则
- 临时关闭杀毒软件测试是否恢复正常
确认执行模式为同步
若代码中误设置了异步执行,可能引发连接问题。确保调用的是同步执行方法:RESTRequest1.Execute; // 不带Async参数,确保同步执行若使用异步模式,需正确绑定
OnExecuteComplete事件处理结果,避免因异步逻辑未处理导致的异常。
内容的提问来源于stack exchange,提问作者Japster

