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操作摄像头截图实现远程监控的例子
Mar 25 Python
python实现的udp协议Server和Client代码实例
Jun 04 Python
wxPython窗口的继承机制实例分析
Sep 28 Python
python uuid模块使用实例
Apr 08 Python
Python2.x版本中maketrans()方法的使用介绍
May 19 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
Python短信轰炸的代码
Mar 25 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
Python3 用什么IDE开发工具比较好
Nov 28 Python
pytorch中的model.eval()和BN层的使用
May 22 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
python字典key不能是可以是啥类型
2020/08/04 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
正规的求职信范文分享
2013/12/11 职场文书
合作经营协议书范本
2014/04/17 职场文书
宣传口号大全
2014/06/16 职场文书
2014年学生会工作总结
2014/11/07 职场文书
商铺租房协议书范本
2014/12/04 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
财务经理岗位职责
2015/01/31 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
go 实现简易端口扫描的示例
2021/05/22 Golang
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
最新最全的手机号验证正则表达式
2022/02/24 Javascript
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS