![]() |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Mit den Indys geht es relativ einfach...
Delphi-Quellcode:
Einer Umsetzung mit den Delphi-REST-Komponenten bin ich damit aber keinen Schritt näher... :wall:
procedure TRestForm.GetArticlesButtonClick(Sender: TObject);
var MS : tMemoryStream; begin MS := tMemoryStream.Create; idHttp1.Request.BasicAuthentication := false; idHttp1.HTTPOptions := idHttp1.HTTPOptions + [hoInProcessAuth]; // <- Ohne das schlägt es fehl !!! idHTTP1.Request.Username := UsernameEdit.Text; idHTTP1.Request.Password := KeyEdit.Text; idHTTP1.Get(URLEdit.Text+'/articles', MS); MS.Position := 0; ResponseMemo.Lines.LoadFromStream(MS); FreeAndNil(MS); end; |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Ich setze das ganze im Moment mit den Indys um und das funktioniert auch wunderbar, aber es wurmt mich dennoch, dass ich das nicht mit den REST-Komponenten umgesetzt bekomme. Ich habe auch keinen echten Ansatz, da bei vielen Funktionen, die mir weiterhelfen könnten in der Hilfe nur :
"Embarcadero Technologies verfügt zurzeit über keine zusätzlichen Informationen. Bitte unterstützen Sie uns bei der Dokumentation dieses Themas, indem Sie Ihre Kommentare auf der Diskussionsseite eingeben."steht. "Rate mal wie's funktioniert" finde ich ein echt blödes Konzept :( |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
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:
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.
http://benutzername:apikey@www.server.de/api
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:
Die URL muss man jetzt ggf. selbst kodieren.
try
RestRequest.URLAlreadyEncoded := true; RESTRequest.Execute; except 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: ![]() Für die nächste Version gibt es auch ein Ticket dazu: ![]() Damit wird hoffentlich auch bald offiziell Basic-Auth umgesetzt |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Zitat:
![]() Und jetzt hab ich schon umgebaut :roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz