2016-12-28 138 views
0

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与异常工作正常类EHTTPClient,ESocketError或EXC_BAD_ACCESS,虽然程序使用尝试...终于节(制定它作为尝试...除了不改变任何东西)。不幸的是,在可以处理状态码之前引发异常。

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

回答

1

确保各种事件被分配,从而使这类知道什么密码提示做,重定向等

标准实例初始化类像

With TFPHTTPClient.Create(Nil) do 
    try 
    AllowRedirect:=True; 
    OnRedirect:[email protected]; 
    OnPassword:[email protected]; 
    OnDataReceived:[email protected]; 
    OnHeaders:[email protected]; 
    { Set this if you want to try a proxy. 
    Proxy.Host:='ahostname.net.domain'; 
    Proxy.Port:=80; 

请研究例子,并尝试对您的问题进行排序,直到您拥有可重复的案例。如果仍有问题,请将其提交给错误追踪程序

在极少数情况下,使用HEAD()检查标头的存在可以加速例如筛选旧网址列表

+0

谢谢,您的回复有助于解决我的问题。 – jwdietrich