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之重回函数
Oct 10 Python
python+Django+apache的配置方法详解
Jun 01 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
Flask实现跨域请求的处理方法
Sep 27 Python
Python序列类型的打包和解包实例
Dec 21 Python
Python hashlib模块实例使用详解
Dec 24 Python
Python requests模块安装及使用教程图解
Jun 30 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
python多线程方法详解
Jan 18 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/03/03 欧美动漫
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python创建或生成列表的操作方法
2019/06/19 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
师德建设实施方案
2014/03/21 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
简爱电影观后感
2015/06/10 职场文书
创业计划书之干洗店
2019/09/10 职场文书