10 Stimmen

Erhalten der Antwort von TIdHttp mit Fehlercode 400

Ich habe eine Delphi-Bibliothek für die StackApps API geschrieben.

Ich habe ein Problem mit Indy. Ich verwende die Version, die mit Delphi 2010 geliefert wird. Wenn Sie ungültige Parameter an eine der StackApps-API übergeben, wird ein HTTP-Fehlercode 400 zurückgegeben und in der Antwort wird ein JSON-Objekt mit weiteren Details enthalten sein.

Indem Sie http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose im Chrome-Browser besuchen, können Sie ein Beispiel sehen. I.E. und Firefox verstecken das JSON.

Mit WireShark kann ich sehen, dass das JSON-Objekt mit dem folgenden Code zurückgegeben wird, aber ich kann nicht über Indy darauf zugreifen.

Für diesen Testcode habe ich eine TIdHttp-Komponente auf das Formular gezogen und den folgenden Code in einen Klick-Button platziert.

procedure TForm10.Button2Click(Sender: TObject);
var
 SS : TStringStream;
begin
  SS := TStringStream.Create;
  IdHTTP1.Get('http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose',SS,[400]);
  Memo1.Lines.Text := SS.DataString;
  SS.Free;
end;

Ich habe [400] übergeben, damit keine 400-Ausnahme ausgelöst wird. Es ist, als ob Indy aufgehört hätte, die Antwort zu lesen. Da der Inhalt von Memo1 leer ist.

Ich suche nach einem Weg, um an die JSON-Details zu gelangen.

19voto

Remy Lebeau Punkte 498719

Entfernen Sie den AIgnoreReplies-Parameterwert aus Ihrem Aufruf von Get(). Lassen Sie die Ausnahme normalerweise auftreten. Der JSON-Text, den Sie suchen, befindet sich im EIdHTTPProtocolException.ErrorMessage-Eigenschaft. Zum Beispiel:

procedure TForm10.Button2Click(Sender: TObject); 
begin 
  try
    Memo1.Lines.Text := IdHTTP1.Get('http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose'); 
  except
    on E: EIdHTTPProtocolException do begin
      if E.ErrorCode = 400 then
        Memo1.Lines.Text := E.ErrorMessage
      else
        raise;
    end;
  end;
end;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X