Mit CGI-Script kommunizieren
-
Hi,
wir haben ein CGI-Script auf einem Http Server laufen, das Daten empfangen soll und auch wieder was zurücksendet.
Die Daten die hingesendet werden sind sehen ungefähr so aus:?parameter1=wert1¶meter2=wert2
Mei Problem ist, dass ich nicht weiß wie ich das Zurückgesendete abfangen kann.
Eine Verbindung ist schon hergestellt, und ich kann vom Server auch diverse Daten abfragen lassen ( mit HttpQueryInfo() ).Hier mal der Code:
HINTERNET hInternet; HINTERNET hHttpSession; HINTERNET hHttpRequest; char Buf[1000]; DWORD BufSize = 1000; DWORD ReadSize; hInternet = InternetOpen( "WININET Sample Program", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); hHttpSession = InternetConnect( hInternet, "www.mycgiserver.com", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); hHttpRequest = HttpOpenRequest( hHttpSession, "POST", NULL, NULL, "http://www.mycgiserver.com/servlet/baller.BallerServer", NULL, 0, 0); HttpSendRequest( hHttpRequest, NULL, 0, "?param=Hallo!", 0); if( !HttpQueryInfo( hHttpRequest, HTTP_QUERY_RAW_HEADERS_CRLF, Buf, &BufSize, NULL) ) { AfxMessageBox( "scheiße" ); } AfxMessageBox( Buf );
Bei HttpQueryInfo hab ich jetzt mal HTTP_QUERY_RAW_HEADERS_CRLF eingesetzt. Da kommen dann ein paar Daten zurück die ich garnicht brauche.
Andere Flags sind auf dieser Seite:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/query_info_flags.aspVielleicht muss man ja einen anderen dieser Flags angeben, ich seh aber keinen der sich gut anhört
Geht das überhaupt mit HttpQueryInfo()? Wenn nicht, mit was sonst?
Danke im Voraus für eventuelle Antworten.
-
HTTP_QUERY_URI oder HTTP_QUERY_VARY vielleicht
-
Nö, mit den beiden gehts leider auch nicht.
Wir haben es schon in VisualBasic getestet, dort gibt es ein inet Steuerelement.
Dort deklariert man eine Funktion die ein Ergeignis abfängt:Private Sub Inet_StateChanged(ByVal State as Integer) Select Case State ' Schaun, was los ist Case icResponseReceived ' Antwort vom Server Variant vtData = Inet.getChunk(1024, icString) ' Liest das erste Segment in die Variable vtData String strData DoEvents ' Weiß nicht, ob das unbedingt sein müsste Do While Not bDone strData = strData & vtData Doevents vtData = Inet.getChunk1024, icString) If Len(vtData) = 0 then bDone = True End if Loop Debug.Print strData End Select End Sub
Ich hab das nicht geschrieben, aber auf jeden Fall tut es das was ich will. Das ganze müsste jetzt nur noch in C++ sein und am besten mit WinAPI.