一尘不染

Python请求:在单个请求中发布JSON和文件

json

我需要进行API调用,以上传文件以及带有有关文件详细信息的JSON字符串。

我正在尝试使用python请求库来执行此操作:

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数据和文件有关。

关于如何使它工作的任何想法?


阅读 246

收藏
2020-07-27

共1个答案

一尘不染

不要使用json进行编码。

import requests

info = {
    'var1' : 'this',
    'var2'  : 'that',
}

data = {
    '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)

请注意,这不一定是您想要的,因为它将成为另一个表单数据部分。

2020-07-27