HTTPClient.Get返回错误12002,但它在浏览器中工作正常

guz6ccqo  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(379)

我有一个函数(使用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’。我刚从我的浏览器用户代理上复制了它。

我关掉了杀毒软件和防火墙,但结果是一样的。

有什么主意吗?我不明白问题出在哪里。

iibxawm4

iibxawm41#

如果像您所说的那样调用该函数,那么您使用的是代理,在本例中,代理安装在本地计算机(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的直接连接不起作用,但通过代理建立的连接起作用。

相关问题