2011年9月8日木曜日

Google App Engine はじめようかな? - Request Header の取得

ここで一つ疑問。

HTTP の Request Body は標準入力から取得できるとのことだけれど、HTTP の Request Header はどうやって取得するのだろう?

複数の python スクリプトに対応させる

その前に、現状 HTTP Request が helloworld.py にしかハンドリングされないので、
/py/(script name) で (script name).py が呼び出されるように app.yaml を変更してみる。

app.yaml
application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /py/(.*)
  script: \1.py

http://localhost:8080/py/helloworld でアクセスして、Hello, World! が表示されたからよいみたい。

疑問の解決に必要な知識

CGI 標準では、HTTP_ で始まる環境変数に設定されているはずなので、HTTP_ で始まる環境変数の内容を表示してみる。

HTTP_ で始まる環境変数を表示する

http_.py
import os

print 'Content-Type: text/plain'
print ''

for key, val in os.environ.iteritems():
    if (key[0:5]=="HTTP_"):
     print  key+": "+val

"http://localhost:8080/py/http_" でアクセスしてみると……

http://localhost:8080/py/http_
HTTP_ACCEPT_CHARSET: Shift_JIS,utf-8;q=0.7,*;q=0.7
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
HTTP_CONNECTION: keep-alive
HTTP_HOST: localhost:8080
HTTP_CACHE_CONTROL: max-age=0
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE: ja,en-us;q=0.7,en;q=0.3

……うまくいった。