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&parameter2=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.asp

    Vielleicht 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.


Anmelden zum Antworten