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实现高效求解素数代码实例
Jun 30 Python
python生成ppt的方法
Jun 07 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
python怎么对数字进行过滤
Jul 05 Python
python如何删除列为空的行
Jul 17 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
Python max函数中key的用法及原理解析
Jun 26 Python
Python 统计序列中元素的出现频度
Apr 26 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
10 个经典PHP函数
2013/10/17 PHP
PHP图片上传代码
2013/11/04 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
php常用hash加密函数
2014/11/22 PHP
php编写简单的文章发布程序
2015/06/18 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
js操作textarea 常用方法总结
2012/12/03 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
浅谈flask源码之请求过程
2018/07/26 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
django 外键model的互相读取方法
2018/12/15 Python
pytorch 预训练层的使用方法
2019/08/20 Python
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
挂牌仪式主持词
2014/03/20 职场文书
企业新年寄语
2014/04/04 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
教学质量月活动总结
2015/05/11 职场文书
幽灵公主观后感
2015/06/09 职场文书
Python列表的索引与切片
2022/04/07 Python