首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTPClient.Get返回错误12002,但在浏览器中工作正常。

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

Stack Overflow用户
提问于 2022-09-08 10:05:24
回答 1查看 103关注 0票数 0

我有一个函数(使用Host = 'https://api.ipify.org/'):

代码语言:javascript
复制
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‘。我只是从浏览器用户代理复制的。

我关闭了防病毒和防火墙,但结果是一样的。

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

EN

回答 1

Stack Overflow用户

发布于 2022-09-08 19:13:28

如果按您所说的调用函数,则使用代理,在本例中,代理安装在本地计算机(127.0.0.1)和TCP端口9090上。

您确定代理仍然在运行吗?

如果不想使用此代理,则必须使用'False'作为第一个参数调用该函数。

一个更简单的代码可以是:

代码语言:javascript
复制
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的直接连接不能工作,但是通过代理建立的连接可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73647296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档