我需要执行 API 调用来上传文件以及包含该文件详细信息的 JSON 字符串。
我正在尝试使用 python requests lib 来执行此操作:
import requests
info = {
'var1' : 'this',
'var2' : 'that',
}
data = json.dumps({
'token' : auth_token,
'info' : info,
})
headers = {'Content-type': 'multipart/form-data'}
files = {'document': open('file_name.pdf', 'rb')}
r = requests.post(url, files=files, data=data, headers=headers)
这会引发以下错误:
raise ValueError("Data must not be a string.")
ValueError: Data must not be a string
如果我从请求中删除“文件”,它就会起作用。
如果我从请求中删除“数据”,它就会起作用。
如果我不将数据编码为 JSON,它就可以工作。
因此,我认为该错误与在同一请求中发送 JSON 数据和文件有关。
关于如何让它发挥作用有什么想法吗?
看到这个线程如何将 JSON 作为多部分 POST 请求的一部分发送 https://stackoverflow.com/questions/35939761/how-to-send-json-as-part-of-multipart-post-request#comment59538358_35939761
不要自己设置Content-type标头,将其留给pyrequests来生成
def send_request():
payload = {"param_1": "value_1", "param_2": "value_2"}
files = {
'json': (None, json.dumps(payload), 'application/json'),
'file': (os.path.basename(file), open(file, 'rb'), 'application/octet-stream')
}
r = requests.post(url, files=files)
print(r.content)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)