ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
3861
3861
EMPFEHLEN
-
29.07.08 14:21 #1Sg Tutorials.de Gastzugang
Ich scheitere momentan an einem http post request an ein von mir selbst geschriebenes php-script. ;(
der PHP script sieht wie folgt aus
ich möchte mittels c++ und winsocks einen string daten an das script übergeben.<?php
$daten=$_POST["daten"];
$datei = fopen("logfile.txt","w");
fwrite($datei, $daten);
?>Geändert von Sg (29.07.08 um 14:27 Uhr)
-
31.07.08 01:58 #2Sg Tutorials.de Gastzugang
niemand ?
-
Um das mit Winsocks zu lösen müsste der Server Sockets unterstützen UND du auch einen socketserver ins PHP script einbauen, einfacher gehts mit WinInet.
Ersetze domainurl, scripturl und stringtosend mit deinen Daten
Mit- linken musst du libwininet.a
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include <wininet.h> HINTERNET inet = InternetOpen("MyAgent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); HINTERNET connection; HINTERNET request; unsigned long flags; unsigned long len; connection = InternetConnect(inet, TEXT(domainurl), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); flags = INTERNET_FLAG_PRAGMA_NOCACHE; request = HttpOpenRequest(connection, "POST", TEXT(scripturl), NULL, NULL, NULL, flags, 1); HttpSendRequest(request, "Content-Type: application/x-www-form-urlencoded", 47, (void*)stringtosend, strlen(stringtosend)); std::stringstream CompleteBuffer; do{ char antwortbuffer[10000]; InternetReadFile(request, antwortbuffer, sizeof antwortbuffer, &len); antwortbuffer[len] = '\0'; CompleteBuffer << antwortbuffer; } while(len); InternetCloseHandle(request); InternetCloseHandle(connection); InternetCloseHandle(inet); MessageBox(NULL,CompleteBuffer.str().c_str(),"Server Antwort",MB_OK);Geändert von Thomasio (31.07.08 um 14:06 Uhr)
-
Hallo alle zusammen...
Was bedeutet denn: "Mit- linken musst du libwininet.a"
Wie kann ich die Lib einbinden, damit er alles kennt? Hab ich die denn standardmäßig auf dem PC, oder muss ich die erst irgendwo runterladen!?
-
Irgendwie hab ich das mit dem Linker geschafft...
(Borland Builder:
Projekt -> Optionenquelle bearbeiten
und dann bei
<SPARELIBS value="[...] wininet.lib"/> hinten mit dazu geschrieben =)
)
Nur, falls das jemanden interessiert..
Thomasio, gehe ich richtig davon aus, dass die domainurl = "http//172.20.x.x/" sein muss und die scripturl z.B. = "CGI/Execute/" wäre?
Wenn ich an die Adresse "http//172.20.x.x/CGI/Execute/" Daten (stringtosend) senden will?!
-
Scripturl ist auf jeden Fall eine PHP Datei, also wenn überhaupt im CGI Verzeichnis, dann
CGI/Execute/scriptname.php
Domainurl beginnt nicht mit http, weil es ja ein HttpOpenRequest ist, und ended auch nicht mit /
Mal angenommen dein Script liegt auf
http://www.meinedomain.com/homepage/...was/script.php
dann ist
domainurl = "www.meinedomain.com"
scripturl = "homepage/irgendwas/script.php"
und stringtosend sieht dann etwa so aus:
stringtosend = "daten1=1234&daten2=3456&daten3=abcde"
-
Danke für die schnelle Antwort =)
Es war etwas schwierig bei mir, da ich kein Script anspreche... Sondern ein Cisco IP Phone. Und dem kann man Daten nach 172.30.x.x/CGI/Execute Daten zum anzeigen schicken. Ebenso war noch eine Authentifizierung nötig. Aber jetzt hat alles geklappt.
Wichtig war die richtige Datenlänge.. Und nützlich war der Wireshark, um zu sehen, was wirklich gesendet wird... Besonders, da ich aus JavaScript es schon mal hinbekommen habe. So kann man die Protokolldaten genau vergleichen =)
Hier mal mein Code, falls jemand das Problem noch mal hat:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
HINTERNET inet = InternetOpen("My App", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (inet != NULL) { HINTERNET connection = NULL; HINTERNET request = NULL; unsigned long flags = INTERNET_FLAG_PRAGMA_NOCACHE; connection = InternetConnect( inet, "172.30.x.x", INTERNET_DEFAULT_HTTP_PORT, UserName.c_str(), //String Passwort.c_str(), //String INTERNET_SERVICE_HTTP, 0, 1); if (connection != NULL) { const char* ContentType = "text/xml"; request = HttpOpenRequest( connection, "POST", "/CGI/Execute", //Pfad NULL, //HTTP standard Version NULL, //keine Referenz &ContentType, flags,1); } if (request != NULL) { Erg = HttpSendRequest( request, "Content-Type: application/x-www-form-urlencoded\0", -1L, POST_Text.c_str(), POST_Text.Length()); } InternetCloseHandle(request); InternetCloseHandle(connection); InternetCloseHandle(inet); }
Einbinden der Lib siehe oben.. (Borland C++ Builder)
Danke an dieser Stelle an alle, die geholfen haben! =)
Besonders an dich Thomasio
Ähnliche Themen
-
HTTP-Request mit QT
Von cesupa im Forum C/C++Antworten: 3Letzter Beitrag: 22.02.08, 19:25 -
Http-request ?!
Von mIschKo im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 03.10.07, 18:32 -
HTTP Request
Von MagicEpox im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 02.08.07, 14:08 -
Http Request
Von NanoNuna im Forum PHPAntworten: 2Letzter Beitrag: 02.04.07, 10:55 -
Http - Request
Von rauchmelder im Forum .NET ArchivAntworten: 2Letzter Beitrag: 04.12.04, 22:42





Zitieren
Login





