2013-06-10 27 views
8

Delphi6 i XE3.Delphi: Indy - jak zdobyć ciało odpowiedzi na błąd?

Chcę uzyskać rzeczywistą treść odpowiedzi na żądanie. Ale serwer popełnia błąd 500. Następnie Indy zastępuje tekst odpowiedzi opisem błędu.

Ta strona jest przeznaczona również dla odpowiedzi 500 w nietypowych operacjach i musimy ustalić, co zrobić z tekstem odpowiedzi.

Czy mogę uzyskać tekst odpowiedzi z IdHTTP lub z obiektu wyjątku, gdy kod stanu to 500?

Dzięki za wszelkie informacje!

+0

Która wersja Indy? – mjn

+0

dla XE3. Interesujące jest to, że FErrorMessage EIdHTTPProtocolException zawiera odpowiedź, ale nie miałem do niej dostępu ... :-( – durumdara

+0

@durumdara: Dlaczego nie miałeś do niego dostępu? 'EIdHTTPProtocolException.ErrorMessage' jest własnością publiczną –

Odpowiedz

13

Kiedy TIdHTTP napotka błąd serwera, to podnosi EIdHTTPProtocolException wyjątek, gdzie jego ErrorCode właściwość zawiera kod stanu HTTP (500 itp), jego Message właściwość zawiera tekst stanu HTTP („Błąd wewnętrzny”, itd), a jego właściwość ErrorMessage zawiera tekst podstawowy odpowiedzi, jeśli taki istnieje. Na przykład:

try 
    IdHTTP1.Get(...); 
except 
    on E: EIdHTTPProtocolException do begin 
    // use E.ErrorCode, E.Message, and E.ErrorMessage as needed... 
    end; 
end;