fphttpclient 中的错误处理?

Error handling in fphttpclient?

fphttpclient 可以很好地处理像

这样的简单示例
procedure ReadFromURL(theURL: string);
var
  httpClient: TFPHTTPClient;
  FileContents: String;
  theStatusCode: integer; 
begin
  httpClient := TFPHTTPClient.Create(nil);
  try
    FileContents := httpClient.Get(theURL);
    theStatusCode := httpClient.ResponseStatusCode;
    if theStatusCode = 200 then
     begin
       ; // do something
     end
    else
     ShowMessage(IntToStr(theStatusCode));
  finally
    httpClient.Free;
  end;
end;

但仅当 URL 存在时,状态代码为 200。在其他情况下,代码在 httpClient.Get 处崩溃并出现异常class EHTTPClient、ESocketError 或 EXC_BAD_ACCESS,尽管该过程使用 try ... finally 部分(将其表述为 try ... except 不会改变任何东西)。不幸的是,在处理状态代码之前引发了异常。

使用 fphttpclient 处理错误的推荐方法是什么?在调用 Get 方法之前,是否有任何方法可以检查资源的存在(并且可能还有 URL 的正确性)?

确保分配了各种事件,以便class知道如何处理密码提示、重定向等

标准示例初始化 class 喜欢

With TFPHTTPClient.Create(Nil) do
  try
    AllowRedirect:=True;
    OnRedirect:=@ShowRedirect;
    OnPassword:=@DoPassword;
    OnDataReceived:=@DoProgress;
    OnHeaders:=@DoHeaders;
    { Set this if you want to try a proxy.
    Proxy.Host:='ahostname.net.domain';
    Proxy.Port:=80;

等等

请研究示例并尝试解决您的问题,直到您有可重现的案例。如果还有问题,请提交到bugtracker

在极少数情况下,使用 HEAD() 检查 headers 是否存在可以加快速度,例如筛选旧网址列表