python上传时包含boundary时的解决方法


Posted in Python onApril 08, 2020

python上传时,包含boundary时的处理方式

img_url = []
  upload_pic_url = "http://admin.mdt.oujingroup.cn/uploader/img"

  headers = {

   'X-Requested-With': 'XMLHttpRequest',
   }

  img_file = open(name, 'rb')
  multipart_encoder = MultipartEncoder(
   fields={
    'file': ('test.jpg', img_file, "image/jpeg"),
   },
   boundary='----WebKitFormBoundaryJ2aGzfsg35YqeT7X'
  )

  headers['Content-Type'] = multipart_encoder.content_type
  # 请求头必须包含一个特殊的头信息,类似于Content-Type: multipart/form-data; boundary=${bound}
  try:
   r = requests.post(upload_pic_url, data=multipart_encoder, headers=headers)
   print(name)
   # print(r.text)
   temp = json.loads(r.text)
   t = temp['data']['absolute_path']
   # return t
   print(t)
   return img_url.append(t)
  except HTTPError as e:
   print(e)

补充知识:Python模拟浏览器上传文件脚本(Multipart/form-data格式)

http协议本身的原始方法不支持multipart/form-data请求,这个请求由原始方法演变而来的。

multipart/form-data的基础方法是post,也就是说是由post方法来组合实现的,与post方法的不同之处:请求头,请求体。

multipart/form-data的请求头必须包含一个特殊的头信息:

Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了。具体的头信息如下:

Content-Type: multipart/form-data; boundary=${bound}

实例:

import os, random, sys, requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
 
url = 'http://127.0.0.1/sendmsg'
argvstr = sys.argv[1:]
argv_dict = {}
for argv in argvstr :
  argv = str(argv).replace("\r\n" , "")
  DICT = eval(argv)
  argv_dict.update(DICT)
 
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0',
  'Referer': url
  }
 
multipart_encoder = MultipartEncoder(
  fields={
    'username': argv_dict['username'],
    'pwd': argv_dict['pwd'],
    'type': 'txt',
    'friendfield': argv_dict['friendfield'],
    'friend': argv_dict['friend'],
    'content': argv_dict['content'],
    'file': (os.path.basename(argv_dict['file']) , open(argv_dict['file'], 'rb'), 'application/octet-stream')
    #file为路径
    },
    boundary='-----------------------------' + str(random.randint(1e28, 1e29 - 1))
  )
 
headers['Content-Type'] = multipart_encoder.content_type
#请求头必须包含一个特殊的头信息,类似于Content-Type: multipart/form-data; boundary=${bound}
 
r = requests.post(url, data=multipart_encoder, headers=headers)
print(r.text)
#注意,不要设置cookies等其他参数,否则会报错
 
# 例子/usr/local/python36/bin/python3 /opt/lykchat/test_upload.py "{'username':'lykchat','pwd':'123456','type':'img','friendfield':'1','friend':'xxxx','content':'恭喜发财','file':'/root/b.jpg'}"
#等同于curl -F "file=@/root/a" 'http://127.0.0.1/sendmsg?username=lykchat&pwd=123456&type=img&friendfield=1&friend=xxxx&content=恭喜发财'

以上这篇python上传时包含boundary时的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
python决策树之CART分类回归树详解
Dec 20 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Python List列表对象内置方法实例详解
Oct 22 Python
在python中修改.properties文件的操作
Apr 08 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
python MultipartEncoder传输zip文件实例
Apr 07 #Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
Apr 07 #Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 #Python
Django Xadmin多对多字段过滤实例
Apr 07 #Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 #Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 #Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 #Python
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
php中{}大括号是什么意思
2013/12/01 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
常用PHP封装分页工具类
2017/01/14 PHP
详解php用static方法的原因
2018/09/12 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Django中的Signal代码详解
2018/02/05 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
公司员工的自我评价范例
2013/11/01 职场文书
太太口服液广告词
2014/03/20 职场文书
气象学专业个人求职信
2014/04/22 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
MySQL系列之十一 日志记录
2021/07/02 MySQL
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python