2013-06-10 15 views
8

Delphi6 e XE3.Delphi: Indy - come ottenere il corpo della risposta in caso di errore?

Desidero ottenere il corpo di risposta reale di una richiesta. Ma il server genera l'errore 500. Quindi l'Indy sostituisce il testo di risposta con la descrizione dell'errore.

Questa home page è progettata per rispondere a 500 in operazioni non anormali e dobbiamo determinare cosa fare dal testo di risposta.

È possibile ottenere il testo di risposta da IdHTTP o da un oggetto Exception quando il codice di stato è 500?

Grazie per qualsiasi informazione!

+0

quale versione di Indy? – mjn

+0

per XE3. È interessante notare che FErrorMessage di EIdHTTPProtocolException contiene la risposta, ma non ho potuto accedervi ... :-( – durumdara

+0

@durumdara: Perché non potevi accedervi? "EIdHTTPProtocolException.ErrorMessage' è una proprietà pubblica –

risposta

13

Quando TIdHTTP incontra un errore del server, si solleva un'eccezione EIdHTTPProtocolException, dove la sua proprietà ErrorCode contiene il codice di stato HTTP (500, ecc), la sua proprietà Message contiene il testo di stato HTTP ("Errore interno", ecc), e la sua proprietà ErrorMessage contiene il testo del corpo della risposta, se presente. Quindi, ad esempio:

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