Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 15.11.11 20:47 
Ich hab da ein kleines Problem mit der HTTP-Komponente der Indys.

Ich schicke per POST ein paar Daten an eine URL. Als Antwort erwarte ich ein bisserl XML mit Statusmeldungen, ob das gesendete ok war, oder ob da ein Fehler drin ist. Diese Antwort muss ich parsen und ggf. darauf reagieren.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
try
  // ...
  Response := fIDHTTP.Post(BaseApiURL, ParamList);
  // ... 
except
  on E: EIdHTTPProtocolException do
  begin   
     MessageText := Scrobble_ProtocolError + #13#10 + 'Server message:'#13#10 + E.Message + #13#10 + Response;
     SendMessage(fWindowHandle, WM_Scrobbler, SC_NowPlayingException, lParam(PChar(MessageText)));
  end;
  // ...
end;

Problem dabei ist, wenn die Anfrage nicht in Ordnung war, dann wird kein 200er Code zurückgeliefert, sondern mal ein 400 (Bad Request) oder auch ein 403 (Forbidden). Die Variable Response enthält dann auch nur einen Leerstring. In der Dokumentation zu der API des Webservices hinter der URL steht aber, dass auch dann ein passendes XML-File geliefert wird, wo genauer drin steht, warum das ein Bad Request oder Forbidden war. Per Wireshark konnte ich diese Daten auch sehen, aber wie komme ich mit den Indys daran? :gruebel:

_________________
We are, we were and will not be.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 15.11.11 23:20 
Ok, Lösung selbst per Google gefunden, wenn auch sehr versteckt. :D

Falls es jemand später brauchen kann: Der gewünschte Inhalt steckt dann in E.ErrorMessage. Da finde ich dann meinen XML-Code, den ich parsen muss um detailiertere Infos zum Fehler zu bekommen.

_________________
We are, we were and will not be.