我需要访问浏览器发送到服务器的原始 http 请求web.py
。
例如,这是当我浏览某个页面时 Chromium 发出的请求:
$ nc -l 8081
GET / HTTP/1.1
Host: 127.0.0.1:8081
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
我试图从 中获取它web.ctx.env
,但那是一本字典(虽然我更喜欢原始的原始文本请求)并且它与其他一些数据混合在一起:
SERVER_SOFTWARE: CherryPy/3.2.0 Server
SCRIPT_NAME:
ACTUAL_SERVER_PROTOCOL: HTTP/1.1
REQUEST_METHOD: GET
PATH_INFO: /
SERVER_PROTOCOL: HTTP/1.1
QUERY_STRING:
HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP_USER_AGENT: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22
HTTP_CONNECTION: keep-alive
REMOTE_PORT: 55409
SERVER_NAME: localhost
REMOTE_ADDR: 127.0.0.1
wsgi.url_scheme: http
SERVER_PORT: 8081
wsgi.input: <web.wsgiserver.KnownLengthRFile object at 0x940b16c>
HTTP_HOST: 127.0.0.1:8081
wsgi.multithread: True
REQUEST_URI: /
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
wsgi.version: (1, 0)
wsgi.run_once: False
wsgi.errors: <open file '<stderr>', mode 'w' at 0xb73010d0>
wsgi.multiprocess: False
HTTP_ACCEPT_LANGUAGE: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
HTTP_ACCEPT_ENCODING: gzip,deflate,sdch
这是我用来获取上述输出的代码:
#!/usr/bin/env python
import web
urls = ('(.*)', 'urlhandler')
class urlhandler:
def GET(self, url):
txt = ""
for k, v in web.ctx.env.items():
txt += ": ".join([k, str(v)]) + "\n"
return txt
if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
我应该从不需要的数据中清除这本字典,还是有一种直接的方法来获取原始请求?