Browser: HTTP Header parsen



  • Hi,

    Ich weiß einfach nicht mehr weiter... Einen HTTP-Header zu parsen der als Response vom Server kommt ist dank Libcurl kein Problem. Aber wie parse ich einen Header den der Browser an einen Server sendet? Ob es Get oder Post ist habe ich mit Regex_search() geregelt. Aber wie kann ich z.B. das Cookie Feld auslesen?

    Beispiel eines zu parsenden Headers:

    POST /wiki/Spezial:Search HTTP/1.1
    Host: de.wikipedia.org
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 24
    
    search=Katzen&go=Artikel
    

    Vielen Dank

    pamax



  • uhm... ich versteh dein Problem nicht ganz, und dein Beispiel enthaelt gar kein Cookie-Feld. Womit genau hast du Schwierigkeiten?

    Wenn ich die einzelnen Informationen aus so einem Header lesen muesste und keine RegEx verwenden will, wuerd ich's in etwa so machen (Pseudocod):

    if zeile.contains("Content-Type"):
        // lies aus, was nach "Content-Type" im String drinnen steht
        int l = strlen("Content-Type");
        contentType = zeile.getSubstring(l, zeile.length() - l);
    else if zeile.contains("Host"):
        ...
    ...
    

    Hilft dir das weiter?



  • wenn's dir um den message-body geht, der http-header ist nach zweimaligem "\r\n" zuende, danach kommt z.b. dein 'search=Katzen&go=Artikel'
    🙂



  • Hier ist die Erklärung der Grammatik http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2
    Und hier ist die Grammatik der HTTP-Header: http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2



  • Willst Du einen HTTP-Server in C++ schreiben? Das ist nicht so trivial. Du solltest die RFC 2616 lesen und implementieren. Wie man einen Parser schreibt, steht in zahlreichen Büchern. Du kannst natürlich einen Open-Source-Webserver nehmen und schauen, wie es da gemacht wurde.

    In meinem Tntnet findest Du auch einen Parser. Kannst ja mal schauen, ob Du damit zurecht kommst.


Anmelden zum Antworten