2011-03-24 66 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