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 是否存在可以加快速度,例如筛选旧网址列表
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 是否存在可以加快速度,例如筛选旧网址列表