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语言中with as的用法使用详解
Feb 23 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
Python中return self的用法详解
Jul 27 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
Django 静态文件配置过程详解
Jul 23 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
python2和python3哪个使用率高
Jun 23 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
pandas抽取行列数据的几种方法
Dec 13 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遍历目录并返回统计目录大小
2014/06/09 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
详解node和ES6的模块导出与导入
2020/02/19 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
树莓派升级python的具体步骤
2020/07/05 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
python matlab库简单用法讲解
2020/12/31 Python
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
监理资料员岗位职责
2014/01/03 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
以权谋私检举信范文
2015/03/02 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python