python得到客户端的请求头

一个pythonweb程序,如何得到客户端发送的全部请求头,CGI变量有部分header,但不全,比如Range值,就没有.看好了,是得到其它程序发送给自己的请求head... 一个python web程序,如何得到客户端发送的全部请求头,CGI变量有部分header,但不全,比如Range值,就没有.看好了,是得到其它程序发送给自己的请求header,不是程序本身get或post其它网页得到的回应头. 展开
 我来答
Coo_boi
推荐于2016-05-31 · TA获得超过1333个赞
知道大有可为答主
回答量:2209
采纳率:50%
帮助的人:241万
展开全部

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://0.0.0.0:8080/

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.
bdwisyou7d
2014-05-28 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1063万
展开全部
这个问题好象问过。 CGI变量?难道你用的是mod_python或者是CGI方式的python。 或者是fast_cgi。

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。也拿到过。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式