我有一个函数(使用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;它运行得很好,但几天前它就坏了。异常(E.Message)返回一个错误:
错误发送数据:(12002)操作超时
我什么都不做,我没有改变任何代码。该函数仍然有效,但只适用于代理params(True)。我知道,你说我阻止了主机,但它在浏览器中仍然正常工作。
PUserAgent='Mozilla/5.0 (WindowsNT10.0;Win64;x64;rv:94.0) Gecko/20100101 Firefox/94.0‘。我只是从浏览器用户代理复制的。
我关闭了防病毒和防火墙,但结果是一样的。
有什么想法吗?我不明白问题出在哪里。
发布于 2022-09-08 19:13:28
如果按您所说的调用函数,则使用代理,在本例中,代理安装在本地计算机(127.0.0.1)和TCP端口9090上。
您确定代理仍然在运行吗?
如果不想使用此代理,则必须使用'False'作为第一个参数调用该函数。
一个更简单的代码可以是:
function CheckIp(UseProxy:Boolean=True; Host:String='https://api.ipify.org/'; ProxyHost:String='127.0.0.1'; ProxyPort:Integer=9090): String;
var
Cli: THttpClient;
begin
Cli:=THTTPClient.Create;
Cli.SecureProtocols:=[THTTPSecureProtocol.SSL2,THTTPSecureProtocol.SSL3,
THTTPSecureProtocol.TLS1,THTTPSecureProtocol.TLS11,
THTTPSecureProtocol.TLS12,THTTPSecureProtocol.TLS13];
try
if UseProxy=True then Cli.ProxySettings.Create(ProxyHost,ProxyPort);
Result := Cli.Get(Host).ContentAsString;
finally
Cli.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(CheckIP(False, 'https://api.ipify.org/'));
end;另外,您是说当您使用代理服务器时,连接正在成功地建立。但是,当您不使用代理时,您将得到错误。
如果您正在工作的PC有连接问题(例如:防火墙、路由表、糟糕的dns配置等),这种情况是可能的。在这种情况下,来自PC的直接连接不能工作,但是通过代理建立的连接可以工作。
https://stackoverflow.com/questions/73647296
复制相似问题