2016-12-28 3 views
0

fphttpclient mit einfachen Beispielen wieFehlerbehandlung in 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; 

aber nur funktioniert gut, wenn die URL vorhanden ist, so dass der Statuscode 200. In anderen Fällen ist der Code stürzt bei httpClient.Get mit Ausnahme von Klasse EHTTPClient, ESocketError oder EXC_BAD_ACCESS, obwohl die Prozedur einen try ... schließlich Abschnitt (Formulierung als versucht ... außer nichts ändert) verwendet. Leider wird die Ausnahme ausgelöst, bevor der Statuscode verarbeitet werden kann.

Was ist die empfohlene Methode, um Fehler mit fphttpclient zu behandeln? Gibt es eine Methode, um vor dem Aufruf der Methode Get nach der Existenz einer Ressource (und möglicherweise auch der Korrektheit einer URL) zu suchen?

Antwort

1

Stellen Sie sicher, die verschiedenen Ereignissen zugeordnet sind, so dass die Klasse weiß, was auf Kennwortabfragen zu tun, Umleitungen usw.

Standardbeispiele init die Klasse wie

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; 

usw.

Bitte studieren Sie Beispiele und versuchen Sie Ihre Probleme zu sortieren, bis Sie reproduzierbare Fälle haben. Wenn es dann noch ein Problem gibt, senden Sie es bitte an den Bugtracker

In seltenen Fällen kann die Überprüfung der Existenz von Headern mit HEAD() z. Durchsieben von Listen alter URLs

+0

Danke, Ihre Antwort hat geholfen, mein Problem zu lösen. – jwdietrich