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 ServerCHttpFile* 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.