XML-Datei mit POST REQUEST an einen Server senden???



  • Hallo zusammen,

    ich habe ein Problem mit der Ansprache eines WEB-Servers. Und zwar soll ich eine
    XML-Datei via "POST REQUEST" an eine Seite übertragen und als Antwort wieder
    eine XML-Datei zurückbekommen.

    Leider habe ich NULL Erfahrung damit, einen Server anzusprechen - mach das zum ersten Mal...

    Ich habe mir schon in den FAQs das Beispiel mit CInternetSession, CHttpConnection und CHttpFile
    angeschaut und ausprobiert, bekomme aber immer eine Exception, dass der "Servername oder die
    Serveradresse nicht verarbeitet" werden konnte.

    Die Seite, die mir genannt wurde, fängt jedoch mit https an, also etwa in der Form:

    https://www.derserver.de/XML/irgendeininterface.php?postDatahierhin

    Diese Adresse gebe ich vollständig an und frage mich, was da falsch sein könnte?

    Außerdem weiss ich auch nicht, was ich als "FormAktion" angeben soll, da ich
    kein Formular habe, in dem ein tag wie action=irgendwas steht.

    Mir liegt eine XML-Datei in einem gegebenen Verzeichnis vor - diese möchte ich öffnen,
    versenden und dann das Ergebnis (was ja auch eine XML-Datei sein sollte), ebenfalls
    in eine Datei schreiben, zur späteren Weiterverarbeitung.

    Ich fände es echt super, wenn jemand solch ein Problem schonmal gelöst hätte und mir
    da helfen kann - da ich nun schon seit mehreren Wochen (!!!) an diesem Problem
    festhänge.

    Also nochmal die wichtigsten Fragen:
    1. Kann man das oben beschrieben Konstrukt mit CHttpConnection und CHttpFile auch für
    https benutzen?
    2. Wie bekomme ich eine Datei von meinem Laufwerk an eine Serveradresse mit obigem AUfbau
    via "POST REQUEST" verschickt
    3. Wie lese ich dann den Rückgabewert vollständig aus?

    Vielen Dank schonmal für alle, die sich dem Problem annehmen möchten.



  • Zu 1. kann ich nix sagen, von daher ist auch fraglich, ob dir der Rest weiter hilft...
    Zu 2. und 3.:

    Über Http (ohne s) mit einer *.asp Datei auf dem Server (keine Ahnung, ob das bei *.php auch geht) geht das so:

    CInternetSession IS(NULL, 1, Parameter1, Parameter2, NULL, 0);
    mit:
    Parameter1 == INTERNET_OPEN_TYPE_PROXY // über Proxyserver ins Internet
    Parameter1 == INTERNET_OPEN_TYPE_DIRECT // ohne Proxyserver direkt ins internet
    Parameter2 == Name vom Proxyserver (z.B. "HeikesComputer") evtl. gefolgt von Doppelpunkt + freier Port (z.B. "HeikesComputer:1234")

    CHttpConnection* pC = NULL;
    pC = IS.GetHttpConnection(Parameter1, Parameter2, Parameter3, Parameter4);
    mit:
    Parameter1 == Server-Url (z.B. bei dir: "www.derserver.de")
    Parameter2 == freier Port vom Server (z.B. 80 oder auch (INTERNET_PORT)80)
    Parameter3 == berechtigter User-Name auf dem Server
    Parameter4 == zugehöriges User-Passwort auf dem Server

    CHttpFile* pRes = pC->OpenRequest(CHttpConnection::HTTP_VERB_POST, Parameter1, Parameter2, 1, NULL, NULL, INTERNET_FLAG_RELOAD);
    mit:
    Parameter1 == ausführbare Datei auf dem Server (z.B. bei dir "/XML/irgendeininterface.php")
    Parameter2 == eigentlich der Ordner ("/XML" und das dann beim Dateinamen (s.o.) weglassen, aber das hat bei mir nicht funktioniert, darum habe ich den kompletten Pfad im Parameter1)

    pRes->SendRequest(Parameter1, Parameter2, Parametr3);
    mit:
    Parameter1 == _T("Content-Type: application/x-www-form-urlencoded")
    Parameter2 == (LPVOID)(LPCTSTR)"SIEHE UNTEN"
    Parameter3 == Parameter2.GetLength()
    und statt "SIEHE UNTEN" muss der Inhalt der XML-Datei stehen. Ich würde die Datei öffnen und in einen CString einlesen und diesen dann dort übergeben. Keine Ahnung, ob es auch besser geht...

    Zeilenweise auslesen der Antwort vom Server:
    TCHAR res[1024];
    while(pRes->ReadString(res, 1023))
    {
    sz; // hier z.B. Zeile für Zeile in einen CSting einlesen und zum Schluss als XML-Datei speichern
    }

    Ausserdem fehlen hier noch Fehlerabfragen, ob die Verbindung zustande kam usw. aber das ist ja nicht die Grundfunktionalität. Datentypen, Rückgabewerte und weitere mögliche Werte der Parameter: siehe MSDN.
    Vielleicht hilfts ja...



  • Fand ich echt toll, in dieser Ausführlichkeit, aber leider kommt immer nur ein 404 (The requested URL /XML/irgendeininterface.php was not found on this server.) zurück, egal in welcher Kombi ich die Parameter anwende...
    Dabei interessant für mich: der Text nach dem Fragezeichen wird nicht mit angezeigt.
    Tja, Vielen lieben Dank trotzdem, die Hilfe hat mir trotzdem viel gebracht: z.B., wie ich die Rückgabewerte auslese, usw.


Anmelden zum Antworten