2012-04-12 38 views
1

我写一个非常基本的Web服务器作为家庭作业,我有它运行的本地主机端口14000,当我浏览到localhost:14000,该服务器返回一个HTML页面上有一个表单(表单的动作是相同的地址 - 本地主机:14000,不知道如果这是正确的或不)。如何接受Python套接字应用程序中的GET请求?

基本上,我希望能够从一次重新加载页面的GET请求收集的数据提交后 - 我怎样才能做到这一点?一般来说,我如何访问GET中的东西?

注意:我已经尝试过socket.recv(xxx),如果第一次加载页面时不起作用 - 在这种情况下,我们没有从客户端“接收”任何东西,因此它只是继续旋转。

+0

你就不能使用了[里urlparse](http://docs.python.org/library/urlparse.html)模块? – 2012-04-12 06:45:22

+0

[How to receive a HTTP response from a basic python server?](http://stackoverflow.com/questions/10114476/how-to-receive-an-http-response-from-a-basic-python) -服务器) – 2012-04-12 06:46:08

回答

2

秘密就在于conn.recv,这将给你的请求的浏览器/客户端发送的报头。如果它们看起来像我用safari生成的那样,你可以轻松地解析它们(即使没有复杂的正则表达式)。

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("&")} 
相关问题