python得到客户端的请求头
http-server能提供的环境变量是有限的,一般是基于标准的cgi接口实现,这样就难免会去除一些不常用到的信息。如果想获取完整头信息只能自己实现,或者是使用python实现的http-server。如webpy中就可以通过web.ctx.env访问header信息。
webpy项目中:
class index:
def GET(self):
for k in web.ctx.env:
print k, web.ctx.env[k]
运行结果:
D:\>python code.py
HTTP_COOKIE webpy_session_id=33d6e36b5ba97b4b8047508d38aac8b045dc09d2
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_USER_AGENT Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gec
ko) Chrome/35.0.1916.114 Safari/537.36
HTTP_CONNECTION keep-alive
REMOTE_PORT 1842
SERVER_NAME localhost
REMOTE_ADDR 127.0.0.1
wsgi.url_scheme http
SERVER_PORT 8080
wsgi.input <web.wsgiserver.KnownLengthRFile object at 0x013D8E10>
HTTP_HOST localhost:8080
wsgi.multithread True
HTTP_CACHE_CONTROL max-age=0
REQUEST_URI /
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*
;q=0.8
wsgi.version (1, 0)
wsgi.run_once False
wsgi.errors <open file '<stderr>', mode 'w' at 0x00BA60D0>
wsgi.multiprocess False
HTTP_ACCEPT_LANGUAGE zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ja;q=0.2
HTTP_ACCEPT_ENCODING gzip,deflate,sdch
127.0.0.1:1842 - - [28/May/2014 15:13:29] "HTTP/1.1 GET /" - 200 OK
wsgi传递的环境变量是基于cgi的,所以也不全啊.打印全部的wsgi变量,没有Range.
range是http1.1协议的东西,你完全不用考虑,基本上不会出现。这个交给apache2或者是nginx去解决。你程序里需要的客户端参数通常会全部获得。
大部分参数比如cookie, etag, x-*都可以获得到。content*, connection之类可能就没有了。或者是有也没有意义。
另外客户端还有一些其它的头信息,如果你在配置的时候,要求nginx和apache2向后传递header到python的应用程序中,通常都会获得。
我要用的就是Range值啊!我用的是Apache+mod_wsgi,因为只是个小程序,所以没用框架,怎么能取得Apache返回的Range值呢?apache应该不需要额外配置,因为同样的配置,php轻松获取.
以前实现过。似乎是手机APP下载文件之类的时候用的。不记得怎么做的了。 需要配置什么,就可以传递过来。 另外如果仅仅是下载文件可以配置成静态,让apache自己去处理。效率还是挺高的。 如果是视频文件,对可能就是视频播放的时候用过RANGE。也拿到过。