如何正确编写一个接收JSON数据的Python CGI脚本?

3 投票
1 回答
1888 浏览
提问于 2025-04-17 16:29

我现在的测试Python脚本大概是这样的:

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

问题是,即使在某些情况下这个脚本能正常工作,但在其他情况下,它似乎会卡住,可能是在执行read()的时候。

由于一些其他原因,我被迫使用tomcat来运行cgi脚本,不确定这是否有影响。

1 个回答

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))

撰写回答