Python基于requests实现模拟上传文件


Posted in Python onApril 21, 2020

方法1:

1.安装requests_toolbelt依赖库

#代码实现
def upload(self):
    login_token = self.token.loadTokenList()
    for token in login_token:
      tempPassword_url = self.config['crm_test_api']+'/document/upload'
      tempPassword_data = self.data_to_str.strToDict('''title:1.png
      course_name_id:63
      course_id:1112
      desc:7
      doc_type:1
      is_public:1''',value_type='str')
      files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}
      tempPassword_data.update(files)
      m = MultipartEncoder(
        fields=tempPassword_data
      )
      tempPassword_headers = {"Content-Type": m.content_type, "token": token}
      tempPassword_request = requests.post(url=tempPassword_url,data=m,headers=tempPassword_headers)
      print(tempPassword_request.content)

2.组装MultipartEncoder对象需要的参数:将tempPassword_data的字段合并至files

1.files参数介绍:

1.字典key对应file字段(我们系统是这样,具体结合前端实际的字段为准),如图

Python基于requests实现模拟上传文件

2.字典value里面的对象:

1.filename(服务器最终存储的文件名)

2.filepath(具体的文件路径,注意转义),文件是以二进制的形式进行传输的,所以这里传输时以二进制的形式打开文件并传输

3.content_type:具体结合前端实际的字段为准:一般可定义为: 文本(text)/图片(image)等[/code][code]

3.tempPassword_data:为文件上传时的附带参数

strToDict方法:自己手写的一个字符串转dict的方法

遇到的问题:

Python基于requests实现模拟上传文件

这个错误是说,int对象不能被编码,所以需要手动将int对象转换为str,所以我在此方法中定义了value_type这个参数,用于将字典中的所有value转换为str类型

#具体代码实现,仅供参考
def strToDict(str_in,value_type=None):
    # value_type:转换字典的value为指定的类型,未防止异常,目前仅支持str
    # '''将str转换为dict输出'''
    # '''将带有time关键字的参数放到字符串末尾'''
    # print(str_in)
    if str_in:
      match_str = ':'
      split_str = '\n'
      split_list = str_in.split(split_str)
      str_in_dict = {}
      for i in split_list:
        colon_str_index = i.find(match_str)
        if colon_str_index == -1:
          # '''处理firefox复制出来的参数'''
          match_str = '\t' or ' '
          colon_str_index = i.find(match_str)
        # '''去掉key、value的空格,key中的引号'''
        str_in_key = i[:colon_str_index].strip()
        str_in_key = str_in_key.replace('"','')
        str_in_key = str_in_key.replace("'",'')
        # 正则过滤无用key,只保留key第一位为字母数据获取[]_
        str_sign = re.search('[^a-zA-Z0-9\_\[\]+]', str_in_key[0])
        if str_sign is None:
          # 处理value中的空格与转义符
          str_in_value = i[colon_str_index + 1:].strip()
          str_in_value=str_in_value.replace('\\','')
          try:
            # 遇到是object类型的数据转换一下
            str_in_value=eval(str_in_value)
          except BaseException as error:
            str_in_value=str_in_value
          if value_type in ['str','string']:
            str_in_value=str(str_in_value)
          else:
            str_in_value=str_in_value
          str_in_dict[str_in_key] = str_in_value
      return str_in_dict
    else:
      print("参数都没有,还处理个球嘛")
      return None

3.请求时将headers的content设置为m.content_type,会设置headers的content_type为form—data,类型为str:

MultipartEncoder相关源码:

Python基于requests实现模拟上传文件

Python基于requests实现模拟上传文件

4.请求时设置data为m,会输出一个MultipartEncoder对象:

Python基于requests实现模拟上传文件

方法2:

直接使用requests,无需依赖requests_toolbelt库

过程大同小异,也是需要将字典的value转换为str

注意:headers不要传content_type字段,headers不要传content_type字段,headers不要传content_type字段

请求时:data对应附加参数,files对应files对象

#相关代码
def upload(self):
    login_token = self.token.loadTokenList()
    for token in login_token:
      tempPassword_url = self.config['crm_test_api']+'/document/upload'
      tempPassword_data = self.data_to_str.strToDict('''title:1.png
      course_name_id:63
      course_id:1112
      desc:7
      doc_type:1
      is_public:1''',value_type='str')
      files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}
      tempPassword_headers = {"token": token}
      tempPassword_request = requests.post(url=tempPassword_url,data=tempPassword_data,files=files,headers=tempPassword_headers)
      print(tempPassword_request.json())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python去除字符串两端空格的方法
May 21 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 #Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 #Python
如何基于python对接钉钉并获取access_token
Apr 21 #Python
python用TensorFlow做图像识别的实现
Apr 21 #Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 #Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 #Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 #Python
You might like
php 无限极分类
2008/03/27 PHP
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python进阶教程之文本文件的读取和写入
2014/08/29 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
.net软件工程师面试题
2015/03/31 面试题
毕业生文员求职信
2013/11/03 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
2014年大学生工作总结
2014/11/20 职场文书
结婚仪式主持词
2015/06/29 职场文书
React四级菜单的实现
2022/04/08 Javascript
SQL Server中使用表变量和临时表
2022/05/20 SQL Server
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL