Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Zugriff auf Shopware REST API mit idHTTP (https://www.delphipraxis.net/171695-zugriff-auf-shopware-rest-api-mit-idhttp.html)

mocition 20. Nov 2012 14:32

Zugriff auf Shopware REST API mit idHTTP
 
Hallo,

ich würde gerne die REST API von Shopware (Link zur REST API Dokumentation) nutzen und versuche mit diesem Code darauf zugreifen:

Code:
var MemoryStream: TMemoryStream;
begin

  MemoryStream := TMemoryStream.Create;
  try
    IdHTTP1.Request.URL := 'http://localhost/api';

    IdHTTP1.Request.BasicAuthentication := true;
    IdHTTP1.Request.Username := 'meinApiUser';
    IdHTTP1.Request.Password := 'meinApiKey';

    IdHTTP1.get(IdHTTP1.Request.URL, MemoryStream);
    MemoryStream.Position:=0;
    Memo1.Lines.LoadFromStream(MemoryStream);
  finally
    MemoryStream.Free;
  end;
Leider bekomm ich da immer den Response: {"success":false,"message":"Invalid or missing auth"}

Wie muss ich den Request aufbauen, dass eine erfolgreiche Anmeldung funktioniert?

Danke.
mfg christoph

mjustin 20. Nov 2012 14:43

AW: Zugriff auf Shopware REST API mit idHTTP
 
Klappt es denn mit dem Browser (IE, Firefox)? Bei GET und Basic Auth kann man damit den Zugriff testen. Einfach die URL eingeben und dann User/Pass im Dialog eingeben.

Das wird auch in der Doku beschrieben:

Zitat:

Nachdem der API-Benutzer angelegt wurde sollten Sie zunächst testen, ob dieser korrekt konfiguriert wurde. Rufen Sie hierzu in Ihrem Browser den Frontend Controller "api" auf (http://www.ihredomain.de/api). Geben Sie in dem Authentifizierungsdialog als Benutzernamen den Shopware-Benutzernamen (1) und als Passwort den zugehörigen API-Key (2) ein.

http://wiki.shopware.de/Rest-API-Tut...r_Zugangsdaten

mocition 20. Nov 2012 14:52

AW: Zugriff auf Shopware REST API mit idHTTP
 
Hallo mjustin,

ja im Browser funktioniert es. Sowohl mit dem Anmelde-Dialog als auch mit http://meinApiUser:meinApiKey@localhost/api

mjustin 20. Nov 2012 14:59

AW: Zugriff auf Shopware REST API mit idHTTP
 
Ist es die aktuelle Indy Version (10.5.9)?

mocition 20. Nov 2012 15:07

AW: Zugriff auf Shopware REST API mit idHTTP
 
nein, es ist die Version 10.5.7.
Ich hol mir die aktuellste Version und probier es nochmals

mjustin 20. Nov 2012 15:20

AW: Zugriff auf Shopware REST API mit idHTTP
 
Das Beispiel

http://wiki.shopware.de/Rest-API-Tut...el_API_Clients

verwendet nicht Basic sondern Digest Authentifizierung.

Indy unterstützt Digest, aber dazu muss die Digest-Unit IdAuthenticationDigest eingebunden sein.

BasicAuthentication := true; muss weggelassen werden.

Genaueres kann man mit Fiddler als HTTP Proxy herausfinden, aber ich tippe es lag daran.

Weitere Tipps zum Debuggen sind hier: http://stackoverflow.com/questions/1...n-in-delphi-xe

mocition 20. Nov 2012 15:48

AW: Zugriff auf Shopware REST API mit idHTTP
 
Mit Digest Authetifizierung bekomm ich: HTTP/1.1 400 Bad Request

Code:
var MemoryStream: TMemoryStream;
begin
  MemoryStream := TMemoryStream.Create;
  try
    IdHTTP1.Request.URL := 'http://localhost/api';

    IdHTTP1.Request.Authentication := TIdDigestAuthentication.Create;
    IdHTTP1.Request.Authentication.Username := 'meinApiUser';
    IdHTTP1.Request.Authentication.Password := 'meinApiKey';

    IdHTTP1.get(IdHTTP1.Request.URL, MemoryStream);
    MemoryStream.Position := 0;
    Memo1.Lines.LoadFromStream(MemoryStream);
  finally
    MemoryStream.Free;
  end;

mjustin 20. Nov 2012 16:03

AW: Zugriff auf Shopware REST API mit idHTTP
 
Zitat:

Zitat von mocition (Beitrag 1192092)
Mit Digest Authetifizierung bekomm ich: HTTP/1.1 400 Bad Request

Code:
var MemoryStream: TMemoryStream;
begin
  MemoryStream := TMemoryStream.Create;
  try
    IdHTTP1.Request.URL := 'http://localhost/api';

    IdHTTP1.Request.Authentication := TIdDigestAuthentication.Create;
    IdHTTP1.Request.Authentication.Username := 'meinApiUser';
    IdHTTP1.Request.Authentication.Password := 'meinApiKey';

    IdHTTP1.get(IdHTTP1.Request.URL, MemoryStream);
    MemoryStream.Position := 0;
    Memo1.Lines.LoadFromStream(MemoryStream);
  finally
    MemoryStream.Free;
  end;

Ob Digest als Authentifizierungsmethode eingestellt ist, müsste man in der Konfiguration nachsehen.

Falls das nicht geht (wenn Shopware nicht auf einem eigenen Server installiert ist) ann man sich mit Fiddler die Methode ansehen.

Bei Digest wird der Server mit einem HTTP Header
WWW-Authenticate: Digest realm="testrealm@host.com",...

antworten und bei Basic halt mit
WWW-Authenticate: Basic ...


Die TIdDigestAuthentication.Create; Zuweisung macht Indy selber, der minimale Code wäre (ungetestet):

Code:
    IdHTTP1.Request.Authentication.Username := 'meinApiUser';
    IdHTTP1.Request.Authentication.Password := 'meinApiKey';

    Memo1.Lines.Text := IdHTTP1.get('http://localhost/api');

mocition 20. Nov 2012 18:40

AW: Zugriff auf Shopware REST API mit idHTTP
 
Digest Auth hab ich mal ausgelesen, verbinden kann ich aber immer noch nicht:
Code:
Digest username="meinApiUser",
realm="Shopware4 REST-API",
nonce="dc0e78ffcbef3a87b5e5bfd2719f38e6",
algorithm="MD5",
uri="/api/",
qop="auth",
nc=00000001,
cnonce="a387e108184985c695c70eb999bd4f9c",
response="4ba62efad9e4c33276e342b58128ddea",
opaque="d75db7b160fe72d1346d2bd1f67bfd10"

Union 20. Nov 2012 19:34

AW: Zugriff auf Shopware REST API mit idHTTP
 
Versuch es mal mit
Delphi-Quellcode:
IdHTTP1.Request.BasicAuthentication := False;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz