Frage bezüglich HttpSendRequest



  • Hallo, ich möchte mich gerne etwas in das Thema Http Request einarbeiten, dafür habe ich mir folgendes kleines Projekt vorgenommen:

    Ich möchte ein Programm schreiben welches sich in meinen web.de Email Account einloggt und eine Email über das Webinterface versendet.

    Über das Firefox Http Headers habe ich mir schon angeschaut was da genau an den Server gesendet wird. Theoretisch muss ich doch eigentlich noch die Sachen aus dem Http Headers nachbauen.

    In der MSDN habe ich die Funktion HttpSendRequest gefunden ist das schon der richtige Ansatz? Oder bietet die WIN API da vielleicht noch was anderes an?



  • Ich hab mich entschieden nun alles direkt über WinSock zu machen.

    Zur Übung habe ich mir zwei PHP Seiten Erstellt mit folgendem Inhalt:

    index.php

    <form action="seite2.php" method="post"
    <body>
    <br>
    <input type="Eingabe" name = "var">
    </br>
    <br>
    <input type="Submit" value="Absenden">
    </br>
    </body>
    </form>
    

    seite2.php

    <?php
    
    $var = $_POST["var"];
    
    $handle = fopen("datei.txt","r+");
    
    fwrite($handle, $var);
    fclose($handle);
    
    ?>
    

    So sieht mein Code aus mit dem ich mein request versenden:

    char *data=
    "POST /seite2.php HTTP/1.1\r\n"
    "Host: testaccount435.te.funpic.de\r\n"
    "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0\r\n"
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
    "Accept-Encoding: gzip, deflate\r\n"
    "Connection: keep-alive\r\n"
    "Referer: http://testaccount435.te.funpic.de/\r\n"
    "Cookie: notabotxxx=66ee1d97349a1d9179902518e4b467f1; cken=1333919589; __utma=170934591.1960109034.1333919589.1333919589.1333919589.1; __utmb=170934591.3.10.1333919589; __utmc=170934591; __utmz=170934591.1333919589.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)\r\n"
    "Content-Type: application/x-www-form-urlencoded\r\n"
    "Content-Length: 14\r\n"
    "var=1234567890\r\n"
    "\r\n";
    
    send( clientK.clientSocket,data ,strlen(data ) ,0 );
    

    Das Problem ist einfach das der Inhalt 1234567890 nicht in die Datei geschrieben wird.

    Anstatt POST Variablen zu verwenden habe ich es auch mal mit GET Variablen versucht damit funktionierte es ohne Probleme.

    Das hier gibt mir der Server zurück wenn ich die POST Variable versenden:

    HTTP/1.1 200 OK
    Content-Length: 521
    Date: Sun, 08 Apr 2012 21:16:08 GMT
    Connection: Keep-Alive
    Server: Apache/2.2.16 (Debian) mod_perl/2.0.4 Perl/v5.10.1
    Content-Type: text/html; charset=ISO-8859-1
    Keep-Alive: timeout=10, max=1000
    
    <script type="text/javascript">
    
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-16106315-4']);
      _gaq.push(['_setDomainName', '.funpic.de']);
      _gaq.push(['_trackPageview']);
    
      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript';
    ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
    'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
      })();
    
    </script>
    

    Ich finde es halt seltsam das der Text in der Textdatei auf dem FTP Server nicht geändert wird.
    Zumal der Server ja sogar sagt: HTTP/1.1 200 OK

    Bei wikipedia konnte ich nur was dazu finden wie ein GET request aussehen muss.
    Ich habe so die vermutung das bei meinem POST request irgendwas mit dem carriage return und dem line feed falsch ist ...



  • schau dir das http protokoll nochmal an, post-daten werden nach zweimaligem return angehängt.


Anmelden zum Antworten