我当前的测试python脚本做了类似的事情:
#!/usr/bin/env python
import sys
data = sys.stdin.read()
myjson = json.loads(data)
问题在于,即使这在某些情况下有效,但在其他情况下似乎会阻塞,可能是在read()。
由于其他一些原因,我被迫将tomcat用于cgi脚本,不知道这是否重要。
答案 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))