AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verbindung zu Online-Shop

Ein Thema von freimatz · begonnen am 21. Apr 2018 · letzter Beitrag vom 16. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2      
freimatz
Online

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#1

Verbindung zu Online-Shop

  Alt 21. Apr 2018, 18:22
Hallo zusammen,

mit meinem Programm soll ich mich mit einem Online-Shop verbinden. Dazu habe ich vom Shop-Entwickler Informationen bekommen. Als ersten Schritt soll ich mit POST (vermutlich ist http gemeint) Name und Passwort schicken und bekomme dann ein Cookie. Mit diesem kann ich dann über einige URLs dann verschiedene Informationen abfragen. SSL ist auch ein Thema.
Ich gehe davon aus, dass man mit dem Shop-Entwickler noch reden kann, die API wird nur für mich gemacht.

Selber habe ich vor ca. sieben Jahren eine Anbindung an eine Site mit REST gemacht. Als Komponente hatte ich damals Indy. SSL und Cookies sind neu für mich. Für das Projekt habe ich XE2.

Als erstes interessieren mich eher grundsätzliche Fragen. Für Details würde ich dann später erst mal googeln. Wie gehe ich das am Besten an? Wieder Indy nehmen? Oder gibt es etwas besseres? Was davon sind Boardmittel? An anderer Stelle verwende ich für Dateidownload Wininet.
Was mich auch noch stört ist, dass mein Programm Name und Passwort des Shops kennen (und ggf. speichern) muss. Gibt es da noch andere Lösungen? Was muss man sonst noch alles beachten?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Verbindung zu Online-Shop

  Alt 21. Apr 2018, 19:17
Ein einzelner, minimaler HTTPS POST eines JSON Objekts mit Indy ist überschaubar:

Delphi-Quellcode:
program JSONPostExample;
 
{$APPTYPE CONSOLE}
 
uses
  IdHTTP, IdGlobal, SysUtils, Classes;
 
var
  HTTP: TIdHTTP;
  RequestBody: TStream;
  ResponseBody: string;
begin
  HTTP := TIdHTTP.Create;
  try
    try
      RequestBody := TStringStream.Create('{"日本語":42}',
        TEncoding.UTF8);
      try
        HTTP.Request.Accept := 'application/json';
        HTTP.Request.ContentType := 'application/json';
        ResponseBody := HTTP.Post('https://httpbin.org/post',
          RequestBody);
        WriteLn(ResponseBody);
        WriteLn(HTTP.ResponseText);
      finally
        RequestBody.Free;
      end;
    except
      on E: EIdHTTPProtocolException do
      begin
        WriteLn(E.Message);
        WriteLn(E.ErrorMessage);
      end;
      on E: Exception do
      begin
        WriteLn(E.Message);
      end;
    end;
  finally
    HTTP.Free;
  end;
  ReadLn;
end.
Quellen:
- https://mikejustin.wordpress.com/201...-6-https-post/
- http://stackoverflow.com/a/28493431/80901
- http://stackoverflow.com/a/9254967/80901
- http://www.indyproject.org/sockets/b.../20141222.aspx

Die OpenSSL DLLS müssen dazu im Programmverzeichnis liegen.
(JSON ist neben XML ein häufig in HTTP-APIs eingesetzter Standard)
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von timog
timog

Registriert seit: 26. Sep 2006
Ort: Landkreis Oldenburg (Oldb)
117 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Verbindung zu Online-Shop

  Alt 21. Apr 2018, 19:21
Prinzipiell sind die Indys nicht verkehrt, wie das Beispiel von mjustin zeigt

Es gibt auch Alternativen, mit der Forumssuche wirst Du einige weitere Beispiele zu den Indy und Alternativen (SecureBlackBox, SecureBridge etc.) finden können. SSL benötigt bei Indy halt zwei externe openSSL DLLs. Wininet kenne ich nicht, die Bordmittel von XE2 habe ich nicht mehr auf dem Schirm.

Generell sollte gelten: POSTs mit Benutzernamen und Kennwort nicht über HTTP, sondern über HTTPS (also SSL).

Zu den Anmeldedaten wird auf dem Client irgendwas gespeichert sein bzw. jedes Mal abgefragt werden: ein Token (OAuth, JWT), von dem der Shop bestimmt, wann es abläuft; Benutzername und Kennwort zum Anfordern eines Cookies oder Tokens; oder (ggf. aufwändiger) Client Zertifikate, etc.

Zugangsdaten auf dem Client immer verschlüsselt speichern, Kennwörter eigentlich als Hash, aber da Du das Kennwort wahrscheinlich im Klartext an den Webshop senden musst, wohl mit (AES-) Verschlüsselung auf dem Client speichern.
Timo
Real Programmers are surprised when the odometers in their cars don't turn from 99999 to 9999A.
  Mit Zitat antworten Zitat
freimatz
Online

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Verbindung zu Online-Shop

  Alt 21. Apr 2018, 19:24
Ach ja JSON, habe ich vergessen. Das soll auch hier zum Einsatz kommen. In meiner Firma verwenden wir das auch schon. Danke schon mal.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Verbindung zu Online-Shop

  Alt 22. Apr 2018, 12:16
Um Cookies brauchst du dich in einfachen Fällen bei Indy nicht zu kümmern. Dafür gibts einen fertigen Cookiemanager als Komponente. Nur wenn Cookies clientseitig modifiziert werden müssen, wie das JavaScript bisweilen tut, musst du da selbst Hand anlegen. Den Cookiemanager verknüpfst du mit TIdHTTP, sorgst dafür dass die SSL-DLLs für Indy erreichbar sind, der Rest entspricht dem obigen Codebeispiel von mjustin.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Verbindung zu Online-Shop

  Alt 22. Apr 2018, 12:41
Was mich auch noch stört ist, dass mein Programm Name und Passwort des Shops kennen (und ggf. speichern) muss.
Wird die Anmeldung nur einmal bei der ersten Verbindung benötigt, und dazu manuell eingegeben?
Dann brauchen Benutzername und Password nicht gespeichert werden, wenn für alle weiteren Anfragen das erwähnte Cookie wieder benutzt werden
Dieses muss man (bei Indy über den Cookiemanager) jedesmal neu senden, und vermutlich kann man es dazu einfach lokal speichern.

Wenn das Cookie nur eine begrenzte Gültigkeit hat (z.B. eine Woche), muss Benutzername / Passwort nach dem Ablauf des Cookies wieder neu eingegeben werden.
Es ist aber auch möglich und auch vom Betreiber vorgesehen, das Cookie automatisch zu verlängern, bevor es abläuft.
Michael Justin

Geändert von mjustin (22. Apr 2018 um 12:45 Uhr)
  Mit Zitat antworten Zitat
freimatz
Online

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Verbindung zu Online-Shop

  Alt 24. Apr 2018, 16:55
Ich nehme an, dass mein Programm schon immer wieder mal nachschauen soll, ob der Anwender inzwischen wieder was Neues gekauft hat. Noch nicht klar ist ob das auf Knopfdruck oder Regelmäßig erfolgen soll. Wenn es was Neues gibt, soll mein Programm das laden und verwenden. Ich stelle mir es lästig vor, wenn ich als Anwender jedesmal wieder Name und Passwort eingeben müsste.

Wie dem aus sei - ich habe nun einiges an Stoff zum Forschen, Überlegen, Diskutieren und Implementieren.
Danke für alle Meldungen
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Verbindung zu Online-Shop

  Alt 24. Apr 2018, 18:23
Für den Anwender sollte es konfigurierbar sein ob das Programm zyklisch oder manuell Daten abruft - siehe übliche Vorgehensweise bei Mailern, POP3-Abruf etc.

Natürlich kannst du Zugangsdaten auch lokal speichern. Das macht jeder Webbrowser schließlich auch. Versteht sich von selbst, dass dies verschlüsselt erfolgen muss und dabei auf Standardverfahren gesetzt werden sollte. Nichts ist unsicherer als eine handgeschraubte Verschlüsselung.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
freimatz
Online

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Verbindung zu Online-Shop

  Alt 2. Jun 2018, 13:40
Hallo zusammen,
Danke für alle Hinwiese bislang. Ich habe nun mich für Indy entschieden und Versuche gestartet. Der durchschlagende Erfolg bleibt bislang aus. Basis ist der Vorschlag oben von mjustin. Nach eine "401 Unauthorized" habe ich den erweitert und sieht im Kern nun so aus (persönliche Daten geändert):

Delphi-Quellcode:
      RequestBody := TStringStream.Create('{"日本語":42}', TEncoding.UTF8);
      try
        HTTP.Request.Accept := 'application/json';
        HTTP.Request.ContentType := 'application/json';

        HTTP.Request.Username := 'bla@fasel.de';
        HTTP.Request.Password := 'yTM45ojg5vB50g';
        HTTP.Request.BasicAuthentication := true;

        ResponseBody := HTTP.Post('https://dingsda.de/dada-api/login', RequestBody);
Allerdings kommt noch immer der 401.

Hier noch der Text vom Betreiber:

Zitat:
wir sind von ... mit der Implementation eine API zur ... in den Shop beauftragt.

Für die Anbindung von ... an die ...-API erhalten Sie hiermit die erforderlichen Endpunkte.
Die Endpunkte müssen über SSL (Port 443) angesprochen werden und liefern JSON als Rückmeldung.

Aktuell wird das Zertifikat als nicht valide eingestuft. Wir sind gerade dabei diesen Umstand zu beheben.

Host: https://dingsda.de

Die Zugangsdaten für das .htaccess sind "demo" und "demo".

Endpunkt:
Login: /dada-api/login
Erforderliche Paramter sind <email> und <password>. Endpunkt muss über POST angesprochen werden.
Sie erhalten im Antwort-Header ein Cookie, welches für die Session verwendet wird und für die weiteren Endpunkte erforderlich ist.

Die Antwortet beinhaltet den Status "ok" oder "error", und ggf. die entsprechende Fehlermeldung.
Mach ich da noch was falsch? Was? Danke für Infos.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Verbindung zu Online-Shop

  Alt 2. Jun 2018, 13:46
Ich würde vorschlagen du liest den von dir selbst zitierten Text noch mal in aller Ruhe durch. Die entscheidende Information steht drinnen
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:25 Uhr.
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