我有一个url,我想将一些JSON数据发布到其中,但是我在解码数据时遇到了困难。我正在使用Postman测试将数据发送到web钩子,并且我已经建立了一个系统来捕获web钩子接收到的信息。当我运行以下代码(Python)时:
from urllib.parse import parse_qs
data = parse_qs(request.body.decode())
我得到以下输出,存储在data
变量中:
{' name': [‘”keyOne”\r\n\r\nValueone\r\n——————————————494388199321720430876911\r\nContent-Disposition: form-data',
‘”keyTwo”\r\n\r\nValuetwo\r\n——————————————494388199321720430876911\r\nContent-Disposition: form-data',
‘”keyThree”\r\n\r\nValuethree\r\n——————————————494388199321720430876911--\r\n']}
否则,我应该如何解码JSON数据?当我尝试使用JSON object must be string not bytes
时,我在前面遇到的一个错误是json.loads
。
发布于 2017-11-25 02:24:32
由于您试图解析的数据似乎是多部分/表单数据,我认为最好的方法是cgi.parse_multipart
。为此,您将需要请求体和边界,您可以使用cgi.parse_header
从内容类型标头中获得这些内容。
举个例子:
import cgi
from io import BytesIO
import requests
data = {'param1':'val1', 'param2':'val2'}
files = {'param3':('fname', 'fdata')}
r = requests.post('http://httpbin.org', data=data, files=files)
boundary = cgi.parse_header(r.request.headers['Content-Type'])[1]
boundary['boundary'] = boundary['boundary'].encode()
data = cgi.parse_multipart(BytesIO(r.request.body), boundary)
print(data)
{‘顺1’:b'val1',‘顺2’:b'val2',‘顺3’:B‘’fdata‘}
结果是一个带有字段名的字典和每个字段的值列表(以字节的形式)。
然后,您可以对data
中的第一项值进行解码,以获得字符串的切分。
data = {k:v[0].decode() for k,v in data.items()}
print(data)
{“顺1”:“val1”,“顺2”:“val2”,“顺3”:“fdata”}
https://stackoverflow.com/questions/47483031
复制