18.4 取得环境信息
某些CGI规格说明书会调用Web服务器来得到一些关于session的环境变量。cgi模块会把这些信息作为它处理的一部分。但是,您会经常想直接取得某些环境变量,例如URL或路径信息。
cgi模块提供几个便捷的函数来帮助我们得到环境变量。下面的程序就使用其中的一个函数,这个函数产生的HTML代码表示传给CGI脚本的环境变量。
#!/usr/bin/env python
# CGI Environment - Chapter 18 - environ.cgi
import cgitb
cgitb.enable()
import cgi
print "Content-type: text/html"
print """<HTML>
<HEAD>
<TITLE>CGI Environment</TITLE>
</HEAD>
<BODY>"""
cgi.print_environ()
print "</BODY></HTML>"
在我的系统上,我把这个程序命名为environ.cgi,并放在服务器的cgi-bin目录下。当我访问http://localhost:8765/cgi-bin/environ.cgi/foo的时候,我看到:
Shell Environment:
GATEWAY_INTERFACE
CGI/1.1
HTTP_ACCEPT
*/*
HTTP_USER_AGENT
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6)
Gecko/20040506 Firefox/0.8
PATH_INFO
/foo
PATH_TRANSLATED
/tmp/htdocs/chapters/19/foo
REMOTE_ADDR
127.0.0.1
REMOTE_HOST
localhost
REQUEST_METHOD
GET
SCRIPT_NAME
/cgi-bin/environ.cgi
SERVER_NAME
localhost
SERVER_PORT
8765
SERVER_PROTOCOL
HTTP/1.0
SERVER_SOFTWARE
SimpleHTTP/0.6 Python/2.3.3
让我来再介绍几个更加有趣的环境变量:
l REMOTE_ADDR。包含远程客户端的IP地址。
l PATH_INFO。包含跟随CGI脚本的URL的成分。
l REMOTE_HOST。有时包含远程Web客户端主机名,但是很多Web服务器要么不设置这个,要么设置和REMOTE_ADDR一样的值。
l SERVER_NAME。包含本地Web服务器的名称。
l SERVER_PORT。包含本地Web服务器可以接收请求的端口号。
这些都可以通过os.environ得到。例如,os.environ['REMOTE_ADDR']包含客户端的IP地址。







