Python请求: Post Images on Facebook using Multipart/form-data

标签 python facebook python-requests multipartform-data

我正在使用 facebook API 在页面上发布图像,我可以使用以下命令从网络发布图像:

import requests

data = 'url=' + url + '&caption=' + caption + '&access_token=' + token
status = requests.post('https://graph.facebook.com/v2.7/PAGE_ID/photos',
                       data=data)
print status

但是当我想发布本地镜像(使用 multipart/form-data)时,我收到错误:ValueError:数据不能是字符串。

我正在使用这段代码:

data = 'caption=' + caption + '&access_token=' + token
files = {
    'file': open(IMG_PATH, 'rb')
    }

status = requests.post('https://graph.facebook.com/v2.7/PAGE_ID/photos',
                       data=data, files=files)
print status

我读到( Python Requests: Post JSON and file in single request ),也许无法在多部分编码文件中发送数据和文件,因此我更新了我的代码:

data = 'caption=' + caption + '&access_token=' + token
files = {
    'data': data,
    'file': open(IMG_PATH, 'rb')
    }

status = requests.post('https://graph.facebook.com/v2.7/PAGE_ID/photos',
                       files=files)
print status

但这似乎不起作用,我得到了与上面相同的错误。
你们知道为什么它不起作用吗?也许有办法解决这个问题。

最佳答案

data作为字典传入:

data = {
    'caption', caption,
    'access_token', token
}
files = {
    'file': open(IMG_PATH, 'rb')
}
status = requests.post(
    'https://graph.facebook.com/v2.7/PAGE_ID/photos',
     data=data, files=files)

requests 无法从 application/x-www-form- 生成 multipart/form-data 部分(以及您正在上传的文件) urlencoded 编码字符串。

对 POST 数据使用字典还有一个额外的优点,即 requests 负责对值进行正确编码; caption 尤其可能包含您必须正确转义的数据。

关于Python请求: Post Images on Facebook using Multipart/form-data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38633791/

相关文章:

python - 防止 seaborn 箱线图中的科学记数法

python - PySide/PyQt : Execute functions after GUI loads

python - 想使用 panda 使其看起来/像 sql 一样工作

Python 脚本有效但编译后失败 (Windows)

Python + 请求 + split : What's the fastest/best way to make multiple concurrent 'get' requests?

python - 从向量中有效提取边列表的算法

Facebook API 照片的共享帖子

javascript - Onscroll,执行操作

ios - Xcode6 中 swift 无法解析的标识符 "PFFacebookUtils"

python - 无法使用请求从网页中抓取某个字段的值