我需要訪問瀏覽器發送給web.py
服務器的原始http請求。web.py:獲取原始web請求
例如,這是鉻發出請求,當我瀏覽一些頁面:
$ 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()
我應該從不需要的數據中清除這本詞典,還是有直接的方法來獲取原始請求?
看來你可以更簡單地計算請求的URL:'web.ctx.home + web.ctx.fullpath'。檢查這個:http://webpy.org/cookbook/ctx –