Daten mit "post" an Webserver senden



  • Ist es möglich aus meinem MFC-Programm daten direkt mit der "Post"-Methode an einen Webserver zu senden? (Dieser soll dann die Daten auswerten....)



  • Jep das geht, habs selber mal gemacht.
    Ich kann leider den Link nicht mehr finden, bin aber auf was anderes gestoßen:
    Hier der Link: http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q165/2/98.ASP&NoWebContent=1

    Und hier der Text, falls der Link irgendwann fehlerhaft sein sollte:

    MORE INFORMATION
    In many cases, the server does not respond appropriately if a Content-Type is not specified. For example, the Active Server Pages component of IIS 3.0 actually checks this header specifically for 'application/x-www-form- urlencoded' before adding form variables to the "Request.Form" object. This MIME/Content-Type indicates that the data of the request is a list of URL- encoded form variables. URL-encoding means that space character (ASCII 32) is encoded as '+', special character such '!' encoded in hexadecemal form as '%21'.

    Here is a snippet of code that uses the MFC WinInet classes to simulate a Form POST request:

    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());
    

    Without MFC, the same code translates to straight SDK calls as follows:

    static TCHAR hdrs[] =
          _T("Content-Type: application/x-www-form-urlencoded");
       static TCHAR frmdata[] =
          _T("name=John+Doe&userid=hithere&other=P%26Q");
       statuc TCHAR accept[] =
          _T("Accept: */*");
    
       // for clarity, error-checking has been removed
       HINTERNET hSession = InternetOpen("MyAgent",
          INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
       HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
          INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
       HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
          _T("FormActionHere"), NULL, NULL, accept, 0, 1);
       HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
       // close any valid internet-handles
    

    Hoffe, konnte dir helfen

    Grüße Rapha



  • Vielen Dank für den Tipp! Aber wie kann ich nun die Webseite aufrufen, also die Daten in meinem Explorer auch darstellen....



  • Vielleicht drücke ich mich auch ein bisschen Ungeschickt aus, ich will einfach eine Webseite im Standard-Browser darstellen, die aber von meiner Anwendung mit einem "Post"-Action aufgerufen wird....



  • Hi
    jetzt weiß ich, was du meinst.
    Es gibt vielleicht die Möglichkeit über COM auf die Instance des Internet Explorers zuzugreifen.
    Leider hab ich soetwas noch nicht gemacht.
    Such mal bei Google nach einem Beispiel

    Hoffe, konnte dir helfen.

    Grüße Raphael


Anmelden zum Antworten