如何访问urllib.parse.parse_qs返回字典中的POST表单字段数据?
问题原因
你用错了解析方法:urllib.parse.parse_qs 仅适用于解析 application/x-www-form-urlencoded 格式的请求体,也就是普通键值对拼接的格式(比如username=user1&password=passuser1)。你当前收到的是multipart/form-data格式的表单请求体,带有专属的分隔符边界,用parse_qs自然没法得到正确的键值对,输出的字典完全是错误解析后的乱码结果,没有正常的键值对应关系,自然没法通过d.get("username")拿到值。
正确解析方案
推荐直接用Python标准库内置的cgi模块处理,无需额外安装依赖,代码示例如下:
import cgi import urllib.parse # 直接解析multipart/form-data格式的wsgi请求 form = cgi.FieldStorage( fp=environ['wsgi.input'], environ=environ, keep_blank_values=True ) # 直接获取对应字段的值,返回值已经是解码后的字符串 username = form.getvalue('username', '') password = form.getvalue('password', '') gender = form.getvalue('gender', '') # 写入文件的逻辑可以直接复用 with open('myfile.txt', 'w') as f: print(f"username: {username}, password: {password}, gender: {gender}", file=f)
如果你的服务框架本身带有请求解析能力,也可以直接用框架提供的请求参数获取方法,不需要手动解析wsgi输入流。
内容的提问来源于stack exchange,提问作者Life after Guest
相关产品推荐
相关产品推荐

