python使用 requests,requests_toolbelt上传图片文件,遇到的问题解决

如图中使用postman调用接口

python使用 requests,requests_toolbelt上传图片文件,遇到的问题解决
python使用 requests,requests_toolbelt上传图片文件,遇到的问题解决

关键信息
1、POST请求
2、四个参数,其中一个图片文件
3,请求头

使用python编写脚本调用接口

完整代码,以下代码在2019年4月28日,python3环境下请求成功
涉及公司如appId,url等,已处理。直接复制无法运行。供参考。

import requests
import time
from requests_toolbelt.multipart.encoder import MultipartEncoder

def time_stamp():
	timestamp = int(time.time() * 1000)
	return timestamp

appId = '100'
appSecret = '3cb514f'
timestamp = time_stamp()

url_1 = 'https://xxxxxxxxxxxxxxxx/token'
params = {"timestamp": timestamp, "appId": appId, "appSecret": appSecret}
r_result = requests.get(url_1, params=params, verify=False)
token = r_result.json()["data"]["accessToken"]

url_2 = 'https://xxxxxxxxxxx/analysis'
m = MultipartEncoder({'image': ('pic.jpg', open('pic.jpg', 'rb'), 'image/jpeg'), "timestamp": str(timestamp), "appId": appId, "accessToken": token})
r2_result = requests.post(url_2, data=m, headers={'Content-Type': m.content_type}, verify=False)
print(r2_result.text)

遇到的问题

1,尝试以下两种写法,请求返回 找不到文件
代码如下图

datas = {"image": (open("pic.jpg", "rb"), 'image/jpeg'), "timestamp": timestamp, "appId": appId, "accessToken": token}
r2_result = requests.post(url_2, data=datas, headers=headers, verify=False)

files= {"image": (open("pic.jpg", "rb"), 'image/jpeg')}
datas = {"timestamp": timestamp, "appId": appId, "accessToken": token}
r2_result = requests.post(url_2, data=datas,  files=files, headers=headers, verify=False)

回头再认真看request快速上手文档
http://cn.python-requests.org/zh_CN/latest/user/quickstart.html

python使用 requests,requests_toolbelt上传图片文件,遇到的问题解决

2、引入requests_toolbelt报错,pip install requests_toolbelt安装提示已存在
考虑可能当前版本不支持,更新使用0.9.1版本。
或者其他操作原因,不确定是不是版本问题。
直接下载地址https://pypi.org/project/requests-toolbelt/#files

3,报错AttributeError: ‘int’ object has no attribute ‘encode’
python使用 requests,requests_toolbelt上传图片文件,遇到的问题解决
解决:
timestamp是Int 类型,转成str

jsons = {“xxx”:xxx}
如果其他参数是json格式的requests.post(url_2, data=datas, json=jsons, files=files, headers=headers, verify=False)

参考文章:python使用 requests,requests_toolbelt上传图片文件,遇到的问题解决
链接:http://lovesoo.org/requests-post-multiple-part-encoding-multipart-encoded-file-format.html