Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#14

AW: Zugriff auf Shopware REST API mit idHTTP

  Alt 21. Nov 2012, 17:24
so schaut der Get Request mit dem Delphi Programm aus:
Code:
GET http://localhost/api HTTP/1.1
Connection: keep-alive
Host: localhost
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding: gzip,deflate,sdch, identity
Accept-Language: de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) RockMelt/0.16.91.483 Chrome/16.0.912.77 Safari/535.7
Warum sendet es da keine Digest Daten mit?
Ganz normal - beim ersten GET ist dem Client nicht bekannt, wie er sich anmelden kann. Der Server sendet als Antwort einen 401 Error zurück um dem Client mitzuteilen, dass eine Authentifizierung benötigt wird, daraufhin wiederholt der Client den GET Request und gibt dann (also im zweiten Request auf die gleiche URL) die Anmeldedaten im Header mit.

Damit der Client weiss, wie man sich anmelden kann (also per Basic, Digest, NTLM oder anderen Verfahren) sendet der Server in seiner Antwort auf das erste GET auch einen Header in dem alle unterstützten Verfahren genannt werden.

(Da der Firefox Beispiel weiter oben auch schon die Digest Anmeldedaten enthält, kann es sich nicht um den ersten Request handeln, der hier mit Fiddler geloggt wurde).

Um das Problem zu analysieren braucht man die gesamte Kommunikation im Fiddler Protokoll, jeweils für Mozilla und Indy:

* erstes GET auf http://localhost/api
* die vollständige Response des Servers
* zweites GET http://localhost/api mit Digest Daten <- wenn Indy richtig konfiguriert ist, muss es hier auch den Digest Header mitsenden
* die vollständige Response des Servers

Erst im zweiten GET kann man erkennen, ob der Client die vom Server angeforderte Authentifizierungsmethode erkannt hat und benutzt.


Idee: die zweite Response - also nach erfolgreicher Anmeldung - könnte auch einen Redirect Header enthalten. Die IdHTTP HandleRedirects Property muss dann auf True gesetzt sein, damit der Client dem Redirect folgt:

http://stackoverflow.com/questions/4...page-redirects
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat