2012-04-12 6 views
1

Ich schreibe einen sehr einfachen Webserver als Hausaufgabe und ich habe es auf localhost Port 14000 ausgeführt. Wenn ich auf localhost: 14000 browser, sendet der Server eine HTML-Seite mit einem Formular zurück (die Aktion des Formulars ist die gleiche Adresse - localhost: 14000, nicht sicher, ob das richtig ist oder nicht).Wie akzeptiert man die GET-Anfrage in Python-Socket-Anwendung?

Grundsätzlich möchte ich in der Lage sein, die Daten von der GET-Anfrage zu sammeln, sobald die Seite nach dem Senden neu geladen wird - wie kann ich das tun? Wie kann ich generell auf die Sachen im GET zugreifen?

HINWEIS: Ich habe bereits versucht socket.recv (xxx), das funktioniert nicht, wenn die Seite zum ersten Mal geladen wird - in diesem Fall werden wir nichts vom Client "erhalten", so dass es gerade dreht.

+0

Können Sie nicht das [urlparse] (http://docs.python.org/library/urlparse.html) Modul dafür verwenden? –

+0

möglich duplicate of [Wie erhalte ich eine HTTP-Antwort von einem einfachen Python-Server?] (Http://stackoverflow.com/questions/10114476/how-to-receive-an-http-response-from-a-basic-python -Server) –

Antwort

2

Das Geheimnis liegt in conn.recv, die Ihnen die vom Browser/Client der Anfrage gesendeten Header geben wird. Wenn sie wie die aussehen, die ich mit Safari erstellt habe, können Sie sie leicht analysieren (auch ohne ein komplexes Regex-Muster).

data = conn.recv(1024) 
    #Parse headers 
    """ 
    data will now be something like this: 

    GET /?banana=True HTTP/1.1 
    Host: localhost:50008 
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10 
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    Accept-Language: en-us 
    Accept-Encoding: gzip, deflate 
    Connection: keep-alive 

    """ 
    #A simple parsing of the get data would be: 
    GET={i.split("=")[0]:i.split("=")[1] for i in data.split("\n")[0].split(" ")[1][2:].split("&")} 
Verwandte Themen