我的第一个基于 Web的过滤代理
2007-03-29 11:58:53 来源:WEB开发网使用 Python [cgi] 模块 import
cgi, sys
cfg_dict = {
'target':
'<STDOUT>'}
sys.stderr = sys.stdout
form = cgi.FieldStorage()
if
form.has_key(
'source'):
cfg_dict[
'source'] = form[
'source'].value
在以上几行中,要注意几处细节。我们所使用的一个技巧是设置 sys.stderr = sys.stdout。如果我们的脚本遇到了一个未捕获的错误,通过这个操作,追溯就显示回到客户机浏览器。这可以节省许多调试 CGI 应用程序的时间。但您也许不想让用户看到这些(或者如果它们可能向您报告问题详细信息,您也许会向用户显示这些内容)。接着,我们将 HTML 表单值读取到类似于字典的 form 实例中。表单有一个 .has_key() 方法,这与真正的 Python 字典非常相似。但是,与 Python 字典不同,要真正获取键中的值,我们必须查看键的 .value 属性。
至此,HTML 表单中的所有东西都成了纯 Python 变量,而且我们可以在其它任何 Python 程序中处理它们。
使用 urllib 模块
就像大多数 Python 模块一样,urllib 以直观且简单的方法处理许多复杂事物。urllib 中的 urlopen() 函数可以处理任何远程资源 -- 无论是 http:、ftp: 还是 gopher: --就将它当作是本地文件。如果使用 urlopen() 抓取了一个远程(伪)文件对象,可以将它当作本地(只读)文件的文件对象来进行处理:
使用 Python [urllib] 模块 from
urllib
import
urlopen
import
string
source = cfg_dict[
'source']
if
source ==
'<STDIN>':
fhin = sys.stdin
else
:
try
:
fhin = urlopen(source)
except
:
ErrReport(source+
' could not be opened!', cfg_dict)
return
doc =
''
for
line
in
fhin.readlines():
# Need to normalize line endings!
doc = doc+string.rstrip(line)+
'
'
更多精彩
赞助商链接