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