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 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
浅谈Django REST Framework限速
Dec 12 Python
Python实现的双色球生成功能示例
Dec 18 Python
python写一个md5解密器示例
Feb 23 Python
python3实现猜数字游戏
Dec 07 Python
python进阶之自定义可迭代的类
Aug 20 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
Python 调用C++封装的进一步探索交流
Mar 04 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
杏林同学录(三)
2006/10/09 PHP
网友原创的PHP模板类代码
2008/09/07 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
javascript 常用功能总结
2012/03/18 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
出生医学证明样本
2014/01/17 职场文书
普通员工辞职信
2014/01/17 职场文书
升学宴主持词
2014/04/02 职场文书
教师考察材料范文
2014/06/03 职场文书
教师工作失职检讨书
2014/09/18 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
老干部座谈会主持词
2015/07/03 职场文书
python字典的元素访问实例详解
2021/07/21 Python
对讲机的最大通讯距离是多少
2022/02/18 无线电
Python echarts实现数据可视化实例详解
2022/03/03 Python