Ich möchte gerne in meiner Delphi-Applikation den Zugriff auf den Online-Shop eines Großhändlers über die IDS-Schnittstelle anbieten.
Den Zugriff auf die Artikeldaten im Shop erhalte ich dabei über HTTP-POST mit den Parametern kndnr (Kundennummer im Shop), pw_kunde (Passwort im Shop), ghnummer (Artikelnummer) und die action=ADL (Artikel Deep Link). Die Antwort des Shops würde ich gerne im Standard-Browser anzeigen.
Edit:
Wenn ich diesen HTML-Code an den Shop schicke, dann bekomme ich die Daten wie gewünscht angezeigt:
Wie schaffe ich es, diese Informationen aus meiner Anwendung heraus an den Server zu schicken?
Derzeit versuche ich es mit dem weiter unten angegebenen Konstrukt. Als Antwort vom Shop-Server erhalte ich allerdings die Fehlermeldung, dass der Parameter kndnr nicht übergeben wurde.
Meine Fragen:
- wie kann ich die Daten, die in dem HTML-Code oben aufgeführt sind, sinnvoll aus einer Delphi-Anwendung an den Shop-Server schicken?
- Gibt es bei HTTP-Post etwas zu beachten, das ich übersehen habe?
- Ist das Zusammenfügen der einzelnen POST-Parameter mit dem &-Zeichen korrekt?
- Wie kann ich die Antwort des Servers ohne das Erstellen einer temporären HTML-Datei im Standard-Browser anzeigen?
- Ist der Ansatz, die Antwort des Servers mit InternetReadFile zu lesen sinnvoll? Oder sollte ich eher die lokale HTML-Datei mit den POST-Daten erstellen und diese dann über den lokalen Browser an den Shop-Server schicken?
Ich würde nur ungern Fremdkomponenten verwenden und habe nur Delphi4 im Einsatz...
Danke für jede Hilfe.
Ralph
Den Zugriff auf die Artikeldaten im Shop erhalte ich dabei über HTTP-POST mit den Parametern kndnr (Kundennummer im Shop), pw_kunde (Passwort im Shop), ghnummer (Artikelnummer) und die action=ADL (Artikel Deep Link). Die Antwort des Shops würde ich gerne im Standard-Browser anzeigen.
Edit:
Wenn ich diesen HTML-Code an den Shop schicke, dann bekomme ich die Daten wie gewünscht angezeigt:
Code:
<HTML> <BODY> <FORM ACTION="http://www.shop.de/ids.php" CONTENT="text/html" ENCTYPE="multipart/form-data" METHOD="POST"> <input type=hidden name="kndnr" value="12345"> <input type=hidden name="pw_kunde" value="geheim"> <input type=hidden name="version" value="1.3"> <input type=hidden name="action" value="ADL"> <input type=hidden name="ghnummer" value="4711"> <input type="submit" value="Abschicken"> </FORM> </BODY> </HTML>
Derzeit versuche ich es mit dem weiter unten angegebenen Konstrukt. Als Antwort vom Shop-Server erhalte ich allerdings die Fehlermeldung, dass der Parameter kndnr nicht übergeben wurde.
Meine Fragen:
- wie kann ich die Daten, die in dem HTML-Code oben aufgeführt sind, sinnvoll aus einer Delphi-Anwendung an den Shop-Server schicken?
- Gibt es bei HTTP-Post etwas zu beachten, das ich übersehen habe?
- Ist das Zusammenfügen der einzelnen POST-Parameter mit dem &-Zeichen korrekt?
- Wie kann ich die Antwort des Servers ohne das Erstellen einer temporären HTML-Datei im Standard-Browser anzeigen?
- Ist der Ansatz, die Antwort des Servers mit InternetReadFile zu lesen sinnvoll? Oder sollte ich eher die lokale HTML-Datei mit den POST-Daten erstellen und diese dann über den lokalen Browser an den Shop-Server schicken?
Ich würde nur ungern Fremdkomponenten verwenden und habe nur Delphi4 im Einsatz...
Code:
// *************************************** // HTTP-Session vorbereiten // *************************************** hSession := InternetOpen(PChar('MyAppName'), INTERNET_OPEN_TYPE_DIRECT, NIL, NIL, 0); if not Assigned(hSession) then begin MessageDlg('Fehler beim Aufbau der HTTP-Session', mtError, [mbOK], 0); Exit; end; // *************************************** // HTTP-Verbindung aufbauen // *************************************** hConnection := InternetConnect(hSession, PChar('www.shop.de'), INTERNET_DEFAULT_HTTP_PORT, NIL, NIL, INTERNET_SERVICE_HTTP, 0, 1); if not Assigned(hConnection) then begin InternetCloseHandle(hSession); MessageDlg('Verbindung mit dem Shop fehlgeschlagen', mtError, [mbOK], 0); Exit; end; // *************************************** // Anmeldedaten // *************************************** cHTMLSend := 'kndnr=12345&pw_kunde=geheim&action=ADL&ghnummer='; cHTMLSend := cHTMLSend + Trim(ArtikelNr); // *************************************** // HTTP-Request erstellen und senden // *************************************** hRequest := HttpOpenRequest(hConnection, PChar('POST'), PChar('/ids.php'), HTTP_VERSION, NIL, NIL, INTERNET_FLAG_NO_AUTH, 1); cContentType := 'Content-Type: text/html'; HttpSendRequest(hRequest, PChar(cContentType), Length(cContentType), PChar(cHTMLSend), Length(cHTMLSend) - 1); // *************************************** // HTTP-Quelltext des Shops abholen // *************************************** if not InternetQueryDataAvailable(hRequest, nBytes, 0, 0) then MessageDlg('Der Shop liefert keine Daten zurück.', mtError, [mbOK], 0) else begin cHTMLReceive := ''; repeat InternetReadFile(hRequest, @aBuffer, SizeOf(aBuffer), nBytes); cHTMLReceive := cHTMLReceive + aBuffer; until nBytes = 0; end; // *************************************** // HTTP-Session freigeben // *************************************** InternetCloseHandle(hRequest); InternetCloseHandle(hConnection); InternetCloseHandle(hSession); // *************************************** // HTML-Datei erzeugen (muss das sein?) // *************************************** cDateiname := 'Pfad\zu\temp.html'; AssignFile(F, cDateiname); Rewrite(F); Write(F, cHTMLReceive); CloseFile(F); // *************************************** // Onlineshop im Browser aufrufen // *************************************** RSStartBrowser(cDateiname);
Ralph
Comment