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程序与系统shell交互的方式
Apr 09 Python
Python使用django获取用户IP地址的方法
May 11 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
Python实现Kmeans聚类算法
Jun 10 Python
python的常用模块之collections模块详解
Dec 06 Python
Python2和Python3的共存和切换使用
Apr 12 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
python机器学习实现决策树
Nov 11 Python
解决python 找不到module的问题
Feb 12 Python
python 实现的IP 存活扫描脚本
Dec 10 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/11/16 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
jQuery之选择组件的深入解析
2013/06/19 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
Angular路由简单学习
2016/12/26 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
python代码区分大小写吗
2020/06/17 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
医学求职信
2014/05/28 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python