Einzelnen Beitrag anzeigen

Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
74 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 12. Feb 2017, 16:14
Ich habe auch schon länger versucht mit Delphi auf die Shopware-API zuzugreifen. Die Rest-Komponenten von Delphi bieten leider keinen "TDigestAuthenticator", um die von Shopware verwendete Digest-Authentifizierung zu unterstützen.

Aber Delphi verwendet ja inzwischen die systemspezifischen HTTP-Kompontenen für die Rest-Zugriffe, unter Windows also WinHTTP. Das beherrscht im Prinzip die Digest-Methode. Das Dumme ist nur, dass man man über die Rest-Komponenten (RestClient und RestRequest) nicht an die verwendeten HTTP-Komponenten herankommt, da diese als Private deklariert sind. Man hat also keine direkte Chance, die Zugangsdaten für WinHTTP zu setzen.

Man könnte jetzt probieren, über irgendwelche Hacks an die Privaten Eigenschaften zu kommen, ich habe aber eine einfachere Möglichkeiten gefunden und zeige es am Beispiel des Delphi RestDebuggers:

Man übergibt die Zugangsdaten in der URL:

Code:
http://benutzername:apikey@www.server.de/api
Das Problem ist dabei allerdings, dass die so gesetzten Zugangsdaten unterwegs verloren gehen. Schuld ist der Aufruf von URLEncode in "procedure TCustomRESTRequest.Execute". Diese entfernt die Zugangsdaten.
Das lässt sich jedoch verhindern, indem man im Restdebugger in "procedure Tfrm_Main.DoExecuteRequest;" vor dem Execute angibt, dass die URL bereits kodiert ist:

Code:
try
    RestRequest.URLAlreadyEncoded := true;
    RESTRequest.Execute;
  except
Die URL muss man jetzt ggf. selbst kodieren.

Damit funktioniert jetzt der Aufruf der Shopware-API mit dem RestDebugger (zumindest unter Windows).

Der Vollständigkeit halber sei noch erwähnt, dass man alternativ auch im Quellcode von Shopware die Authentifizierungsmethode ändern kann:
https://forum.shopware.com/discussio...tatt-digest/p1

Für die nächste Version gibt es auch ein Ticket dazu:
https://issues.shopware.com/issues/SW-16133
Damit wird hoffentlich auch bald offiziell Basic-Auth umgesetzt
  Mit Zitat antworten Zitat