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中global与nonlocal比较
Nov 21 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
Django内容增加富文本功能的实例
Oct 17 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
python安装pil库方法及代码
Jun 25 Python
Python异常处理例题整理
Jul 07 Python
python实现KNN分类算法
Oct 16 Python
解析PyCharm Python运行权限问题
Jan 08 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
Python实现手势识别
Oct 21 Python
python中yield的用法详解
Jan 13 Python
python代码实现扫码关注公众号登录的实战
Nov 01 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
php中一个有意思的日期逻辑处理
2012/03/25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python方法的延迟加载的示例代码
2017/12/18 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
python发送邮件脚本
2018/05/22 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
pandas.cut具体使用总结
2019/06/24 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
python 读取、写入txt文件的示例
2020/09/27 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
专科文秘应届生求职信
2013/11/18 职场文书
优秀的毕业生的自我评价
2013/12/12 职场文书
车间副主任岗位职责
2013/12/24 职场文书
购房协议书
2014/04/11 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
环保建议书作文500字
2015/09/14 职场文书
2016十一国庆节感言
2015/12/09 职场文书
保险公司增员口号
2015/12/25 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers