AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Mit Rest-Komponenten auf Shopware-API zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Mit Rest-Komponenten auf Shopware-API zugreifen

Offene Frage von "sahimba"
Ein Thema von Guido R. · begonnen am 1. Aug 2016 · letzter Beitrag vom 12. Feb 2017
Antwort Antwort
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 2. Aug 2016, 13:11
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#2

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 2. Aug 2016, 15:39
Fiddler war schonmal eine gute Idee, insofern dass es bestätigt hat, dass es sich um eine Digest-Auhorization handelt...
Code:
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"
Nur wie bekomme ich das jetzt den Rest-Komponenten beigebracht ???
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 2. Aug 2016, 15:47
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 MD5(username+';'+servervalue+';'+password) ) und sendet das dann als Anmeldung zurück.

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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 2. Aug 2016, 16:18
https://evertpot.com/223/

Das sieht ganz gut aus.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 Beiträge
 
Delphi 12 Athens
 
#5

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 2. Aug 2016, 16:21
Zitat:
No Proxy-Authorization Header is present.
Das klingt doch nach dem Grund, warum es nicht mit Proxy-Authorization geht?
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.
Zitat von x-beliebiges Beispiel:
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:12) in /some/file.php on line 23
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 3. Aug 2016, 06:34
Bei den Indys muss man Digest explizit einschalten. Ich kann mal nachschauen, wenn ich im Büro bin.
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#7

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 3. Aug 2016, 12:44
Mit den Indys geht es relativ einfach...
Delphi-Quellcode:
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;
Einer Umsetzung mit den Delphi-REST-Komponenten bin ich damit aber keinen Schritt näher...
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#8

AW: Mit Rest-Komponenten auf Shopware-API zugreifen

  Alt 5. Aug 2016, 20:47
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
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

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

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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 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