Lesen von HTTP requests



  • Hi,

    ich versuche einen simplen Webserver zu programmieren, der
    1. einen request liest
    2. checkt ob er ein GET request ist
    3. die URL extrahiert
    4. überprüft ob die Datei existiert und sie dann öffnet

    Ich glaube bei Punkt 3 hat mein Server Probleme. Ich verwende strtok und dann fopen bzw. open um die Datei zu öffnen. Er gibt nur Fehlermeldungen zurück.

    Hier ist mein Code: http://pastebin.com/EWtSwLfH

    Wenn ich eine test.html in meinen Ordner platziere, zum Port 3499 telnette und GET /test.html eingebe kommt folgender Output:

    /test.html
    test.html
    test.htmlNot existed
    Connection closed by foreign host.

    Vielen Dank für eure Hilfe!



  • siehst du doch an deiner ausgabe (achte auf die zeilenumbrüche)

    token2 soll test.html enthalten.

    vom client kriegst du sowas: "GET /test.html\r\n" readline liest nur bis zum \n. du spaltest das am leerzeichen und guckst dann ob das erste token GET is. Soweit korrekt. Das zweite token "/test.html\r" bearbeitest du, indem du den slash entfernst. Also hast du jetzt "test.html\r" und dass fopen diese datei nicht finden kann ist doch klar.

    Lies dir nochmal das http rfc durch da steht irgentwo, dass eine zeile mit \r\n (carriage und return) aufhören muss nicht nur mit \n was du ja laut deinem code annimmst.

    probier mal ein strlen(token2) und ein strlen("test.html"). Du wirst verschiedene ergebnisse bekommen.

    //edit
    so wies aussieht lässt deine readline funktion auch das \n dran. Musst du also beides entfernen.

    mfg tobZel


Anmelden zum Antworten