![]() |
Verbindung zu Online-Shop
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? |
AW: Verbindung zu Online-Shop
Ein einzelner, minimaler HTTPS POST eines JSON Objekts mit Indy ist überschaubar:
Delphi-Quellcode:
Quellen:
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. - ![]() - ![]() - ![]() - ![]() Die OpenSSL DLLS müssen dazu im Programmverzeichnis liegen. (JSON ist neben XML ein häufig in HTTP-APIs eingesetzter Standard) |
AW: Verbindung zu Online-Shop
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. |
AW: Verbindung zu Online-Shop
Ach ja JSON, habe ich vergessen. Das soll auch hier zum Einsatz kommen. In meiner Firma verwenden wir das auch schon. Danke schon mal.
|
AW: Verbindung zu Online-Shop
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.
|
AW: Verbindung zu Online-Shop
Zitat:
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. |
AW: Verbindung zu Online-Shop
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:thumb: |
AW: Verbindung zu Online-Shop
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. |
AW: Verbindung zu Online-Shop
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:
Allerdings kommt noch immer der 401.
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); Hier noch der Text vom Betreiber: Zitat:
|
AW: Verbindung zu Online-Shop
Ich würde vorschlagen du liest den von dir selbst zitierten Text noch mal in aller Ruhe durch. Die entscheidende Information steht drinnen :-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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