Python CGI 方法實現 (不使用內部的CGI模組)


在 Python 上簡單的實現了基本上 GET, POST 的讀取.
再者還有 Cookie 的讀取,不過這個暫沒空來測試.
寫這的原因,主要是有點重寫 Perl 某些程式,再者不想載入過大的 CGI 內置模組
其二就是想有較好的操控權利..

  • 修正 QUERY_STRING (GET) 為空時不能輸出問題
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
Author : Zeuxis Lo (傻心 - 窮等人家)
Pub-Date: 3/7/2009 21:29
-------------------------------------
4/7/2009 12:47
[Fix] QUERY_STRING Empty Problem
"""

# 載入模組
import os
import sys

# 輸出檔頭
print "Content-type: text/html"
print

# GET 處理
V = {}
if 'QUERY_STRING' in os.environ and len(os.environ['QUERY_STRING']) > 0:
querys = os.environ['QUERY_STRING'].split('&')
for query in querys:
name, value = query.split('=')
V[name] = value

# POST 處理
if 'CONTENT_LENGTH' in os.environ:
pairs = sys.stdin.read(int(os.environ['CONTENT_LENGTH'])).split('&')
for pair in pairs:
name, value = pair.split('=')
V[name] = value

# Cookie 處理
if 'HTTP_COOKIE' in os.environ:
cookies = os.environ['HTTP_COOKIE'].split('; ');
for cookie in cookies:
name, value = cookie.split('=')
V[name] = value

# IP 處理
V['ip'] = os.environ['REMOTE_ADDR']

# Proxy 處理
if 'HTTP_X_FORWARDED_FOR' in os.environ:
V['proxy'] = os.environ['HTTP_X_FORWARDED_FOR']

# 輸出處理後的所有數據
for a in V:
print a, ' = ', V[a], '<br />'

# 輸出分隔線
print "================================<br />"

# 輸出所有相關的環境變量
for a in os.environ.keys():
print a, ' = ', os.environ[a], '<br />'