背景
我们的后台可能都会涉及到一些图片呀、视频、语音等资源的上传,Reuqests是不支持的,但是有个第三方库会支持哦,那就是request-toolbet库
- 首先,当然要安装第三方库,安装代码
pip install requests-toolbelt
- 查看是否安装成功,这个我没有找到比较好的查询方式,直接查看的pip安装的列表
pip list
注意:因为我用的是pycharm,pip安装成功后,在pycharm里面直接导入并不能用 哦,你要在pycharm的库中导入
file----->other setting ------>preferences for new projects ------>project interpreter页面点击加号进入库检索页面
搜索到对应的库,点击下面的安装就可以啦
- 咳咳,那么我们接着说哈,导入包后,我们构建multipart/form格式数据哈,我们先看一下api,
主要吸引力是流式多部分表单数据对象MultipartEncoder
。其API如下所示:(详细链接:https://toolbelt.readthedocs.io/en/latest/uploading-data.html)
从 request_toolbelt 导入 MultipartEncoder
导入 请求
m = MultipartEncoder(
fields = { 'field0':'value','field1':'value',
'field2':('filename',open('file.py','rb'),'text / plain')}
)
r = 请求。交('http://httpbin.org/post' ,数据=米,
标题= { '内容-类型':米。CONTENT_TYPE })
这里的值的构建有两种情况,一种是数值("field0":"value"),这种情况目前我还用到 我就不讲了哈,另一种是文件('field2':('filename',open('file.py','rb'),'text / plain')),比如图片。如下面这张图就是图片上传需要构造的数据(这篇写的比较全可以参考下:https://www.cnblogs.com/mysticbinary/p/11692909.html)
from requests_toolbelt import MultipartEncoder
encoder = MultipartEncoder({
'field': ('file_name', b'{"a": "b"}', 'application/json',
{'X-My-Header': 'my-value'})
})
field:服务端约定的上传文件字段名。一般用到的是file,需要和服务端沟通获取。
file_name: 文件名。一般可以任意写,服务端大多是拿到文件后自己再次命名。
b'{"a":"b"}':文件内容。例:open('/your/file/path', 'rb')
'application/json':文件的MimeType。不同文件类型对应的MimeType可以到这里查询。
{'X-My-Header': 'my-value'}:其他内容,可不传。
例如:
m = MultipartEncoder(
fields = {
'file':('1.jpg',open(os.path.join(os.path.dirname(os.path.realpath(__file__)),'image/jpeg')}
)
完后将m传给方法就可以啦
rsp = requests.put(url=url,headers=headers,json=m)