2013-02-20 100 views
3

我目前的测试python脚本确实是这样的:如何正确编写接收json数据的python cgi脚本?

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

的问题是,即使这在某些情况下工作,在别人看来阻止,可能是在读()。

由于其他一些原因,我不得不使用tomcat到cgi脚本,不知道这个问题无论如何。

回答

2

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

更新:

你输入的数据来通过由网络服务器居住环境。它在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)) 
+0

可否请你发布一个基本的代码示例中,CGI模块文档不提供使用parse_header(任何例子),其中应我得到它需要的参数? – sorin 2013-02-20 11:04:54