我似乎无法弄清楚如何使用WSGI访问POST数据。我在wsgi.org网站上尝试了这个例子,它没有用。我现在正在使用Python 3.0。请不要推荐WSGI框架,因为这不是我想要的。
我想弄清楚如何将它放入fieldstorage对象。
答案 0 :(得分:29)
假设您正尝试将POST数据放入FieldStorage对象中:
# env is the environment handed to you by the WSGI server.
# I am removing the query string from the env before passing it to the
# FieldStorage so we only have POST data in there.
post_env = env.copy()
post_env['QUERY_STRING'] = ''
post = cgi.FieldStorage(
fp=env['wsgi.input'],
environ=post_env,
keep_blank_values=True
)
答案 1 :(得分:22)
body= '' # b'' for consistency on Python 3.0
try:
length= int(environ.get('CONTENT_LENGTH', '0'))
except ValueError:
length= 0
if length!=0:
body= environ['wsgi.input'].read(length)
请注意,WSG尚未完全为Python 3.0指定,并且许多流行的WSGI基础结构尚未转换(或已经转换为2to3d,但未经过适当测试)。 (即使wsgiref.simple_server也不会运行。)你现在正忙着在3.0上做WSGI。
答案 2 :(得分:4)
这对我有用(在Python 3.0中):
import urllib.parse
post_input = urllib.parse.parse_qs(environ['wsgi.input'].readline().decode(),True)
答案 3 :(得分:2)
更短
l = int(env.get('CONTENT_LENGTH')) if env.get('CONTENT_LENGTH') else 0
body = env['wsgi.input'].read(l) if l > 0 else ''
此代码适用于制作。
答案 4 :(得分:0)
我建议你看看一些框架如何做一个例子。 (我不推荐任何一个,只是以它们为例。)
以下是Werkzeug的代码:
http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/wrappers.py#L150
调用
http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/utils.py#L1420
总结这里有点复杂,所以我不会。
答案 5 :(得分:0)
我遇到了同样的问题,我花了一些时间研究解决方案。
包含详细信息和资源的完整答案(因为这里接受的答案在 python3 上对我不起作用,在 env 库等中有许多错误需要纠正):
NullReferenceException: Object reference not set to an instance of an object.