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 21 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
python实现在一个画布上画多个子图
Jan 19 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
PageFactory设计模式基于python实现
Apr 14 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
python 从list中随机取值的方法
Nov 16 Python
python爬取代理ip的示例
Dec 18 Python
python openpyxl模块的使用详解
Feb 25 Python
Django一小时写出账号密码管理系统
Apr 29 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实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
python 连接sqlite及简单操作
2017/06/30 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
Python列表对象实现原理详解
2019/07/01 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
python调用摄像头的示例代码
2020/09/28 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
综合管理员岗位职责
2015/02/11 职场文书
专职安全员岗位职责
2015/04/11 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js