2016-12-28 19 views
0

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; 

だけのような単純な例で正常に動作します fphttpclientは、ステータスコードは、他のケースでは200の例外を除いてhttpClient.Getでコードがクラッシュになるように、URLは、存在する場合プロシージャがtry ... finallyセクションを使用しています(try ... ...以外は何も変更されません)。このセクションでは、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; 

など

のようなクラスを初期化、様々なイベントが割り当てられていることを確認します例を勉強して、再現可能なケースがあるまで問題を分類してみてください。まれに問題がある場合は、bugtrackerに送信してください。

まれに、HEAD()でヘッダーの存在を確認すると、スピードアップできます。古いURLのリストを調べる

+0

ありがとうございました。あなたの返信は私の問題を解決するのに役立ちました。 – jwdietrich