我有一个函数(使用Host = 'https://api.ipify.org/'
):
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;
它在没有代理(FALSE)的情况下工作得很好,但几天前它出现了故障。异常(E.Message
)返回错误:
发送数据时出错:(12002)操作超时
我什么都没做,我没有更改任何代码。该函数仍然有效,但仅适用于代理参数(True)。我知道,你说我屏蔽了主机,但它在浏览器中仍然工作得很好。
PUserAGENT=‘Mozilla/5.0(Windows NT10.0;Win64;x64;RV:94.0)Gecko/20100101 Firefox/94.0’。我刚从我的浏览器用户代理上复制了它。
我关掉了杀毒软件和防火墙,但结果是一样的。
有什么主意吗?我不明白问题出在哪里。
1条答案
按热度按时间iibxawm41#
如果像您所说的那样调用该函数,那么您使用的是代理,在本例中,代理安装在本地计算机(127.0.0.1)和TCP端口9090上。
您确定代理仍在运行吗?
如果不想使用此代理,则必须使用
'False'
作为第一个参数来调用函数。更简化的代码可能如下所示:
此外,您还表示,当您使用代理服务器时,连接正在成功建立。但是,当您不使用代理时,您会收到错误。
如果您正在使用的PC存在连接问题(例如:防火墙、路由表、错误的DNS配置等),则可能会出现这样的情况。在这种情况下,来自PC的直接连接不起作用,但通过代理建立的连接起作用。