Internet - Datenübergabe an Webserver



  • Hi,

    ich möchte zwei Variablen an eine php-Seite übergeben und anschließend den Rückgabewert (wird true oder false sein) auswerten. Dabei soll sich allerdings nicht der Browser öffnen. Aber wie geht das?
    Ich dachte eigentlich an GetUrl oder so. Aber ich finde keine Infos dazu.
    Wenn einer nen Schubs in die richtige Richtung für mich hätte, wär das "not bad". 🙄
    Wie läuft eigentlich der Verbindungsaufbau?
    Gibt´s ne MCF Klasse, die sich anbietet?



  • Hi Trikor,

    ist ganz einfach. Benutzt die WinInet-Api.

    Du hast 2 Möglichkeiten die Variablen an die php-Seite zu übergeben:
    1. mit GET (greif in PHP mit HTTP_GET_VARS["variablenname"] zu)
    benutz folgende Funktion:

    CString getHtmlSource(CString url) 
    {       
       CString somecode, s;       
       CInternetSession session; 
       CInternetFile* file = NULL; 
    
       try 
       {       
          file = (CInternetFile*) session.OpenURL(url);  
       } 
       catch (CInternetException* m_pException) 
       {       
          file = NULL;  
          m_pException->Delete(); 
       } 
    
       if(file) 
       {       
          while (file->ReadString(somecode) != NULL)  
          { 
             s = s + somecode; 
          } 
       } 
    
       file->Close(); 
       return s; 
    }
    

    hänge die Variablen an den Link an:

    CString strSource = getHtmlSource("http://members.tripod.de/deinusername/deinephpdatei.php?variable1=wert&variable2=wert&variable3=wert&variableX=wert");
    

    in strSource ist der Quellcode der PHP Datei gespeichert (z.b. mit echo "true"; oder echo "false";)

    2. Möglichkeit: POST ($HTTP_POST_VARS["variablenname"])

    Direkt von Microsoft:

    CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); 
    // URL-encoded form variables - 
    // name = "John Doe", userid = "hithere", other = "P&Q" 
    CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q"); 
    
    CInternetSession session; 
    CHttpConnection* pConnection = session.GetHttpConnection(_T("ServerNameHere")); 
       CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("FormActionHere")); 
       BOOL result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
    

    Grüße Rapha



  • Habs etwas umgebaut damit es auch absturzsicher ist.

    CString somecode, s;      
     	CInternetSession session("test",1,INTERNET_OPEN_TYPE_PRECONFIG); 
    
     	CStdioFile* pFile = NULL;	
       	CString strUrl("http://www.aspnetsoft.de");
    
       try  
       {   
       		pFile = session.OpenURL(strUrl,1,INTERNET_FLAG_TRANSFER_BINARY,NULL,0);
    
    		if(pFile)  
    		{	        
    			while (pFile->ReadString(somecode) != NULL)   
    			{  
    				s = s + somecode;  
    			}  
    			pFile->Close();  
    		}		
       }  
       catch (CInternetException* e)  
       {        
    		e->Delete();
    		session.Close();
    		CloseHandle(session);   
       }
    

    Und wenn man möchte kann man auch auf CInternetFile casten.
    Meines wissens ist dies nicht WINAPI sondern MFC.



  • Habe eine Frage

    ich hab auch ein problem... das ganze funzt net!

    CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");  
    // URL-encoded form variables -  
    // name = "John Doe", userid = "hithere", other = "P&Q"  
    CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q");  
    
    CInternetSession session;  
    CHttpConnection* pConnection = session.GetHttpConnection(_T("ServerNameHere"));  
       CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("FormActionHere"));  
       BOOL result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
    

    was muss ich für "FormActionHere" einsetzen?



  • Hallo

    Ich nehm mal an die Zieldatei, an die das Post-Request gesendet wird
    (das, was man in HTML mit <form action=""> angibt, oder?)

    Grüße Rapha



  • Also erstmal danke für die vielen Antworten 😃

    eine Frage bleibt allerdings offen. 🙄

    Wie bekomme ich den aus der Funktion den Rückgabewert?
    Wenn ich s auslese (bsp. Unix-Tom) habe ich den kompletten Quellcode der Webseite.
    Ich möchte aber ein true oder false zurückbekommen.



  • Du bekommst das zurück was dir der Webserbver liefert.
    Und wenn es eine Webseite ist dann die.
    Wenn keine CInternetException fällt kannst du ja false zurückgeben.
    Oder wo liegt das Problem?



  • Oh sorry,

    ich hätte der Webseite schon sagen sollen, was Sie zurückgibt. 🤡

    Läuft alles prima! 😃

    Danke 👍

    P.S. Wär vielleicht was für die FAQ´s.


Log in to reply