如何正确编写接收json数据的python cgi脚本?

时间:2013-02-20 10:45:08

标签: python tomcat cgi

我当前的测试python脚本做了类似的事情:

#!/usr/bin/env python
import sys
data = sys.stdin.read()
myjson = json.loads(data)

问题在于,即使这在某些情况下有效,但在其他情况下似乎会阻塞,可能是在read()。

由于其他一些原因,我被迫将tomcat用于cgi脚本,不知道这是否重要。

1 个答案:

答案 0 :(得分:2)

您需要在阅读前检查内容长度,并限制sys.stdin.read()读取的字节数。请参阅cgi.parse_header()

<强>更新

您的传入数据来自Web服务器填充的环境。可以在os.environ中访问。

import os
from cgi import parse_header
os.environ['Content-Type'] = 'text/html; charset=utf-8'
parse_header(os.environ['Content-Type'])
# returns ('text/html', {'charset': 'utf-8'})

所以在您的CGI脚本中,您需要(大致):

import os, cgi, sys
cl, _ = parse_header(os.environ['Content-Length'])
data = sys.stdin.read(int(cl))