2011-03-24 33 views
3

我正在玩一些API,我试图弄清楚这一点。如何检查传入的HTTP头请求的内容

我正在通过API向我的服务器进行基本的HTTP验证请求。作为该请求的一部分,经过身份验证的密钥作为用户名存储在HTTP标头中。

所以我的问题是,我如何获取传入请求的内容,以便我可以对它执行检查?

我所试图做的事:

if incoming request has header == 'myheader': 
    do some stuff 
else: 
    return ('not authorised') 

对于那些有兴趣,我试图让this工作。

UPDATE 我使用Django

+0

是否使用的是Web框架?他们都应该有一个API来轻松访问HTTP标头键值对。 – samplebias 2011-03-24 04:24:04

+0

我正在使用Django。它是特定于Web框架吗? – super9 2011-03-24 04:34:08

+0

尝试[Django的Httprequest的文档](http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest),特别是'HttpRequest.META'。这是一个可以从中访问客户端发送的HTTP头的字典。 – samplebias 2011-03-24 04:43:43

回答

6

http://docs.djangoproject.com/en/dev/ref/request-response/

HttpRequest.META

A standard Python dictionary containing all available HTTP headers. 
Available headers depend on the client and server, but here are some examples: 

     CONTENT_LENGTH 
     CONTENT_TYPE 
     HTTP_ACCEPT_ENCODING 
     HTTP_ACCEPT_LANGUAGE 
     HTTP_HOST -- The HTTP Host header sent by the client. 
     HTTP_REFERER -- The referring page, if any. 
     HTTP_USER_AGENT -- The client's user-agent string. 
     QUERY_STRING -- The query string, as a single (unparsed) string. 
     REMOTE_ADDR -- The IP address of the client. 
     REMOTE_HOST -- The hostname of the client. 
     REMOTE_USER -- The user authenticated by the Web server, if any. 
     REQUEST_METHOD -- A string such as "GET" or "POST". 
     SERVER_NAME -- The hostname of the server. 
     SERVER_PORT -- The port of the server. 

随着CONTENT_LENGTH CONTENT_TYPE和的例外,因为上面给出 ,任何 请求中的HTTP头被转换为META密钥 将所有字符改为 大写字母,用 下划线替换任何连字符并向名称添加HTTP_前缀 。因此,例如,名为X-Bender的标头 将被映射到META密钥HTTP_X_BENDER 。

所以:

if request.META['HTTP_USERNAME']: 
    blah 
else: 
    blah 
2

标题是存储在os.environ。所以,你可以访问HTTP头是这样的:

import os 
if os.environ.haskey("SOME_HEADER"): 
    # do something with the header, i.e. os.environ["SOME_HEADER"] 
+0

所以我不一定非要通过Django来做到这一点?有没有任何方法的专业/职业? – super9 2011-03-24 04:58:18

+0

它确实取决于应用程序,即您正在尝试做什么。做这个服务器端的好处是安全性;您通常可以隐藏用户的详细信息,因为JavaScript对最终用户来说非常透明。 – 2011-03-24 05:12:50