首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python请求:在单个请求中发布JSON和文件

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

Stack Overflow用户
提问于 2013-10-18 09:11:32
回答 4查看 63.6K关注 0票数 52

我需要做一个API调用来上传一个文件以及一个JSON字符串,其中包含有关该文件的详细信息。

我正在尝试使用python request lib来完成此操作:

代码语言:javascript
复制
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)

这将抛出以下错误:

代码语言:javascript
复制
    raise ValueError("Data must not be a string.")
 ValueError: Data must not be a string

如果我从请求中删除“文件”,它就能正常工作。

如果我从请求中删除'data‘,它就能工作。

如果我不将数据编码为JSON,它就可以工作。

因此,我认为错误与在同一请求中发送JSON数据和文件有关。

你有什么办法让它工作起来吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-26 15:20:19

不要使用json进行编码。

代码语言:javascript
复制
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)

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

票数 27
EN

Stack Overflow用户

发布于 2013-10-18 09:28:47

我不认为你可以在一个多部分编码的文件中同时发送数据和文件,所以你也需要让你的数据成为一个“文件”:

代码语言:javascript
复制
files = {
    'data' : data,
    'document': open('file_name.pdf', 'rb')
}

r = requests.post(url, files=files, headers=headers)
票数 3
EN

Stack Overflow用户

发布于 2018-11-30 01:16:09

为了发送Facebook Messenger API,我将所有有效负载字典值都更改为字符串。然后,我可以将有效负载作为data参数传递。

代码语言:javascript
复制
import requests

ACCESS_TOKEN = ''

url = 'https://graph.facebook.com/v2.6/me/messages'
payload = {
        'access_token' : ACCESS_TOKEN,
        'messaging_type' : "UPDATE",
        'recipient' : '{"id":"1111111111111"}',
        'message' : '{"attachment":{"type":"image", "payload":{"is_reusable":true}}}',
}
files = {'filedata': (file, open(file, 'rb'), 'image/png')}
r = requests.post(url, files=files, data=payload)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19439961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档