Python 请求:Post Facebook 上的图片使用 Multipart/form-data

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

我正在使用 facebook API 到页面上的 post 图片,我可以 post 使用这个来自网络的图片 :

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

但是当我想要 post 本地图像(使用 multipart/form-data)时,我收到错误消息:ValueError: Data must not be a string.

我正在使用此代码:

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-urlencoded 编码字符串生成 multipart/form-data 部分(连同您上传的文件)。

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