![]() |
Mit Rest-Komponenten auf Shopware-API zugreifen
Hallo !
Ich habe mir eine Testumgebung mit Shopware 5.X geschaffen und möchte auf dessen Rest Schnittstelle zugreifen. Dazu habe ich einen Benutzer mit den entsprechenden Rechten angelegt. Im Webbrowser erhalte ich, nach Eingabe von Username und dem von Shopware erstellten Key, für die entsprechende Adresse (z.B. meinshop.de/api/articles) das erwartete Ergebnis im JSON-Format. Unter Delphi komme ich mit den REST Client Komponenten aber an der Authentifizierung nicht vorbei. Gleiches gilt für den Rest Debugger. Auch dort erhalte ich als Antwort nur :
Code:
egal welche Einstellungen ich auch für die Authentifizierung probiert habe.
{
"success":false, "message":"Invalid or missing auth" } Hat dies bereits jemand zum laufen gebracht? Für etwas Hilfe wäre ich hier sehr dankbar! Guido |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Schau mal
![]() |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Also, der Doku zu Folge wäre rein garnichts zu beachten,
![]() ![]() aber sowas schonmal probiert? (hilft aber scheinbar nur, wenn PHP als CGI eingebunden ist) ![]() und ![]() |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Hallo !
Die Anleitung von Franke OM hatte ich im Prinzip schon umgesetzt. Auch bei einem Strato vServer ist
Code:
erforderlich um überhaupt Zugriff auf die API zu bekommen.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Selbst wenn ich nur den Rest-Debugger verwende (URL, Ressource "articles", Authentifizierung "Basic" mit Username und Key) erhalte ich "Invalid or missing auth". rufe ich die selber URL/articles auf und bestätige mit Username und Key, so erhalte ich eine korrekte Antwort... In dem Beitrag hier auf der DP wird darauf verwiesen, dass es sich bei der Authentifizierungsmethode um "Digest" handelt. Wie könnte ich das denn mit den Rest-Komponenten umsetzen? |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Schalte doch mal einen Proxy wie Fiddler dazwischen.
Damit kannst Du Dir Anfrage und Antwort des Browsers und Deines Programms im Klartext anzeigen lassen. Auf diese Weise kommt man so einem Problem gut auf die Spur. |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Fiddler war schonmal eine gute Idee, insofern dass es bestätigt hat, dass es sich um eine Digest-Auhorization handelt...
Code:
Nur wie bekomme ich das jetzt den Rest-Komponenten beigebracht ??? :gruebel:
No Proxy-Authorization Header is present.
Authorization Header is present: Digest username="api",realm="Shopware REST-API",nonce="d7cbb7df02fd50d7c3212ab40e4e5396",uri="/shopware/api/articles",cnonce="8f18815a16791289452285734f17210a",nc=00000002,algorithm=MD5,response="a523ab46510c967397f2638b2bc4987c",qop="auth",opaque="d75db7b160fe72d1346d2bd1f67bfd10" |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Du müsstest bei Fiddler bei Deinem Web-Browser mindestens zwei Requests sehen. Zuerst fragt der Web-Browser OHNE Authentifizierungsdaten an. Er bekommt dann eine Antwort mit dem Statuscode 401, aber auch mit einem vom Server erzeugten Wert. Diesen verfuddelt der Client dann mit Benutzername und Passwort (ala
Delphi-Quellcode:
) und sendet das dann als Anmeldung zurück.
MD5(username+';'+servervalue+';'+password)
Diesen Ablauf wirst Du mit den REST-Komponenten nachbauen müssen. Die OAuth-Geschichten zum Beispiel sind ja auch ein Pingpong zwischen Client und Server. Ich würde mal schauen, ob man im Netz zum Beispiel für PHP oder dgl. ein paar Beispiele findet. Ich habe den Wikiedia-Artikel nur überflogen, aber das scheint lediglich eine Fleißaufgabe zu sein, da alle Algorithmen in Delphi vorhanden sind. |
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
|
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Zitat:
Der kann den Header nicht mehr setzen, da der Header schon vorhanden und gesendet ist. Es klingt zumindestens nach dem einen viel zu beliebten Problem in der PHP-Welt. :stupid: Zitat:
|
AW: Mit Rest-Komponenten auf Shopware-API zugreifen
Bei den Indys muss man Digest explizit einschalten. Ich kann mal nachschauen, wenn ich im Büro bin.
|
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 17:06 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