如图中使用postman调用接口
关键信息
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
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’
解决:
timestamp是Int 类型,转成str
jsons = {“xxx”:xxx}
如果其他参数是json格式的requests.post(url_2, data=datas, json=jsons, files=files, headers=headers, verify=False)
参考文章:
链接:http://lovesoo.org/requests-post-multiple-part-encoding-multipart-encoded-file-format.html