Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
3861
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sg Tutorials.de Gastzugang
    Ich scheitere momentan an einem http post request an ein von mir selbst geschriebenes php-script. ;(

    der PHP script sieht wie folgt aus

    <?php
    $daten=$_POST["daten"];
    $datei = fopen("logfile.txt","w");
    fwrite($datei, $daten);
    ?>
    ich möchte mittels c++ und winsocks einen string daten an das script übergeben.
    Geändert von Sg (29.07.08 um 14:27 Uhr)
     

  2. #2
    Sg Tutorials.de Gastzugang
    niemand ?
     

  3. #3
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    643
    Um das mit Winsocks zu lösen müsste der Server Sockets unterstützen UND du auch einen socketserver ins PHP script einbauen, einfacher gehts mit WinInet.

    Ersetze domainurl, scripturl und stringtosend mit deinen Daten

    Mit- linken musst du libwininet.a

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
     
    #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);
    Geändert von Thomasio (31.07.08 um 14:06 Uhr)
     

  4. #4
    Rhox Rhox ist offline Grünschnabel
    Registriert seit
    Aug 2008
    Beiträge
    3
    Hallo alle zusammen...

    Was bedeutet denn: "Mit- linken musst du libwininet.a"
    Wie kann ich die Lib einbinden, damit er alles kennt? Hab ich die denn standardmäßig auf dem PC, oder muss ich die erst irgendwo runterladen!?
     

  5. #5
    Rhox Rhox ist offline Grünschnabel
    Registriert seit
    Aug 2008
    Beiträge
    3
    Irgendwie hab ich das mit dem Linker geschafft...
    (Borland Builder:
    Projekt -> Optionenquelle bearbeiten
    und dann bei
    <SPARELIBS value="[...] wininet.lib"/> hinten mit dazu geschrieben =)
    )

    Nur, falls das jemanden interessiert..

    Thomasio, gehe ich richtig davon aus, dass die domainurl = "http//172.20.x.x/" sein muss und die scripturl z.B. = "CGI/Execute/" wäre?

    Wenn ich an die Adresse "http//172.20.x.x/CGI/Execute/" Daten (stringtosend) senden will?!
     

  6. #6
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    643
    Scripturl ist auf jeden Fall eine PHP Datei, also wenn überhaupt im CGI Verzeichnis, dann

    CGI/Execute/scriptname.php

    Domainurl beginnt nicht mit http, weil es ja ein HttpOpenRequest ist, und ended auch nicht mit /
    Mal angenommen dein Script liegt auf

    http://www.meinedomain.com/homepage/...was/script.php

    dann ist

    domainurl = "www.meinedomain.com"
    scripturl = "homepage/irgendwas/script.php"

    und stringtosend sieht dann etwa so aus:

    stringtosend = "daten1=1234&daten2=3456&daten3=abcde"
     

  7. #7
    Rhox Rhox ist offline Grünschnabel
    Registriert seit
    Aug 2008
    Beiträge
    3
    Danke für die schnelle Antwort =)

    Es war etwas schwierig bei mir, da ich kein Script anspreche... Sondern ein Cisco IP Phone. Und dem kann man Daten nach 172.30.x.x/CGI/Execute Daten zum anzeigen schicken. Ebenso war noch eine Authentifizierung nötig. Aber jetzt hat alles geklappt.

    Wichtig war die richtige Datenlänge.. Und nützlich war der Wireshark, um zu sehen, was wirklich gesendet wird... Besonders, da ich aus JavaScript es schon mal hinbekommen habe. So kann man die Protokolldaten genau vergleichen =)

    Hier mal mein Code, falls jemand das Problem noch mal hat:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    HINTERNET inet = InternetOpen("My App", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
                     if (inet != NULL)
                     {
                            HINTERNET connection    = NULL;
                            HINTERNET request       = NULL;
                            unsigned long flags     = INTERNET_FLAG_PRAGMA_NOCACHE;
     
                            connection = InternetConnect(   inet,
                                                            "172.30.x.x",
                                                            INTERNET_DEFAULT_HTTP_PORT,
                                                            UserName.c_str(), //String
                                                            Passwort.c_str(),  //String
                                                            INTERNET_SERVICE_HTTP,
                                                            0, 1);
     
                            if (connection != NULL)
                            {
                             const char* ContentType = "text/xml";
                             request = HttpOpenRequest(      connection,
                                                             "POST",
                                                             "/CGI/Execute", //Pfad
                                                             NULL,       //HTTP standard Version
                                                             NULL,      //keine Referenz
                                                             &ContentType,
                                                             flags,1);
                            }
                            if (request != NULL)                         {
                             Erg = HttpSendRequest( request,
                                                    "Content-Type: application/x-www-form-urlencoded\0",
                                                    -1L,
                                                    POST_Text.c_str(),
                                                    POST_Text.Length());
                            }
     
                            InternetCloseHandle(request);
                            InternetCloseHandle(connection);
                            InternetCloseHandle(inet);
    }

    Einbinden der Lib siehe oben.. (Borland C++ Builder)


    Danke an dieser Stelle an alle, die geholfen haben! =)
    Besonders an dich Thomasio
     

Ähnliche Themen

  1. HTTP-Request mit QT
    Von cesupa im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 22.02.08, 19:25
  2. Http-request ?!
    Von mIschKo im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 03.10.07, 18:32
  3. HTTP Request
    Von MagicEpox im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 02.08.07, 14:08
  4. Http Request
    Von NanoNuna im Forum PHP
    Antworten: 2
    Letzter Beitrag: 02.04.07, 10:55
  5. Http - Request
    Von rauchmelder im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 04.12.04, 22:42