[英]http.server: decoding POST request to JSON
我正在写一个基于http.server
的非常简单的http服务器(使用Python-3)
客户端应该通过POST发送json对象。
payload={'text': 'bi ba buzemann!',
'nouns': ['streetlight', 'situation'],
'states': ['solid', 'fluid']
}
requests.post(url, data=payload)
这可以很好地到达服务器,但是以序列化形式
def do_POST(self:
length = self.headers['content-length']
data = self.rfile.read(int(length))
# b'states=solid&states=fluid&nouns=oracle&text=bi+ba+buzemann%21'
现在我的问题是:如何将经过urlencoded的结果转换回字典(或中间JSON)?
我是否必须手动执行此操作,如:
for x in str(r).split('&'):
y,z=x.split('=')
if not y in d:
d[y]=[]
d[y]+=[urllib.parse.unquote_plus(z)]
还是在某些通用模块中提供了一些经过调试的功能?
如果可以更改请求,则以JSON发送:
import json
payload={'text': 'bi ba buzemann!',
'nouns': ['streetlight', 'situation'],
'states': ['solid', 'fluid']
}
requests.post(url, data=json.dumps(payload))
您可以这样使用parse_qs
:
>>> from urllib.parse import parse_qs
>>> parse_qs(b'states=solid&states=fluid&nouns=oracle&text=bi+ba+buzemann%21')
{b'nouns': [b'oracle'], b'text': [b'bi ba buzemann!'], b'states': [b'solid', b'fluid']}
解析作为字符串参数给出的查询字符串(类型为application / x-www-form-urlencoded的数据)。 数据作为字典返回。
因此,如果您的客户端应该发送json,请使用@BrentWashBurne的想法将其发布为json。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.