POST mit Opera



  • Hallo!

    Das Programm muss Daten aus einem POST-Formular auslesen, bekomme aber bei Opera folgende Anfragen:

    POST /formular/input HTTP/1.1
    User-Agent: Opera/9.25 (Windows NT 6.0; U; de)
    Host: meinedomain.de:8080
    Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, /;q=0.1
    ...
    Cookie: session=64d9185a10f994d27966f764ecbf35a2
    Cookie2: $Version=1
    Connection: Keep-Alive, TE
    TE: deflate, gzip, chunked, identity, trailers
    Content-Length: 21
    Content-Type: application/x-www-form-urlencoded

    aber im Gegensatz zum IE oder Firefox werden die Daten nicht gleich angehängt, sondern kommen erst in einer der nächsten Anfragen an:

    var1=abcde&var2=12345

    Es geht um einen Chat, in dem nicht jedem Client ein eigener Thread zugeordnet ist, der ewig auf die Abfragen eines Users wartet, sondern mehrere Clients pro Thread abgearbeitet werden müssen.

    Wie kann man mit dem Opera vernünftig POST-Daten auslesen?

    Danke + viele Grüße,
    Marc



  • Du machst einfach pro Socket eine Struktur, in der du halbfertige Transaktionen speicherst. Wenn das POST ohne Inhalt kommt, stopfst du bei der nächsten Nachricht auf diesem Socket den Inhalt dazu und hast deine fertige Nachricht.



  • Marc21Ja schrieb:

    werden die Daten nicht gleich angehängt, sondern kommen erst in einer der nächsten Anfragen an

    willst du damit sagen, dass Opera erst leere POSTs schickt und dann eins mit Daten?



  • So ungefähr. Er schickt zuerst den Header mit den zwei üblichen Leerzeilen am Ende und in einer weiteren Nachricht ohne Header die Postdaten. Dadurch wird das ganze Skript viel umständlicher.



  • Definiere mal bitte genauer, was Du mit "Nachricht" meinst. Meinst Du eventuell "Das, was ich von einmal read() zurückbekomme"?



  • Ja genau. Ich bekomme vom IE und Firefox mit einem recv die ganze Nachricht und bei Opera nur den Header mit den zwei Leerzeilen am Ende. Da die Anfragen zuerst in den Epoll gehen, kommen die POST-Daten also erst nach erneutem Pollen.



  • Das kann dir bei jedem Browser passieren, das hat eigentlich nichts mit Opera zu tun.^^


Anmelden zum Antworten