HTTP POST Daten senden/empfangen



  • Hi zusammen,

    möchte Daten aus meinem Borlandprogramm via POST an ein PHP-Script senden und auch wieder empfangen. dachte ich mache das über wininet.h, da diese der Borland schon mitliefert.

    Habe folgenden Code gefunden:

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

    1. Bin ich hier auf dem richtigen weg oder ist das völliger Blödsinn?
    2. Wie groß darf hier die Datenmenge sein? Post ist doch unbegrenzt!?
    3. Wie sicher ist die Methode? Mal abgesehen von meine PHP-Script auf dem Server:-)?
    4. In welcher Form bekomme ich die Antwort von meinen Server? Auf dem Server kann ich die Daten ja über REQUEST abrufen!

    Danke und Grüße



  • Die main funktion fehlt.



  • Hi,

    ok, das Ding läuft super bei mir!

    Jetzt meine Frage:

    Wie sicher ist die Übertragung via POST bezüglich Datenklau!?

    Danke



  • Hängt davon ab...
    Generell ist alles unsicher da man sich mit einem Socket Sniffer an dein Programm ranhängen könnte oder mit einem netzwerk sniffer die daten abfangen könnte. Allerdings ist die Methode auf jedenfall besser als die GET methode, da man das ja dann schon am URL sehen könnte. Am besten ist es wenn du bei Übertragung von Benutzer Daten dem MD5 hash draus bildest und die Übertragung über HTTPS laufen lässt, wobei selbst das keine 100%tige Garantie für Sicherheit wäre.

    MfG cobra11freak



  • also ich hab daraus mal eine Funktion gebaut jedoch werden anscheinend keine Variablen ("id=1") per post übergeben, in dem beispiel Param1 ... warum ?

    AnsiString http_req(const char* http_url,const char* script_path,const char* param1)
    {
            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(http_url), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
            flags = INTERNET_FLAG_PRAGMA_NOCACHE;
            request = HttpOpenRequest(connection, "POST", TEXT(script_path), NULL, NULL, NULL, flags, 1);
            HttpSendRequest(request, "Content-Type: application/x-www-form-urlencoded", 47, (void*)param1, strlen(param1));
            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);
            AnsiString return_code = CompleteBuffer.str().c_str();
    
            return return_code;
    }
    

Anmelden zum Antworten