Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)


Posted in Python onOctober 22, 2018

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模拟浏览器上传文件脚本的方法(Multipart/form-data格式)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的一个简单LRU cache
Sep 26 Python
详解Python中的from..import绝对导入语句
Jun 21 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
Python饼状图的绘制实例
Jan 15 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
超简单的Python HTTP服务
Jul 22 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 #Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 #Python
Python清空文件并替换内容的实例
Oct 22 #Python
Python过滤txt文件内重复内容的方法
Oct 21 #Python
python对html过滤处理的方法
Oct 21 #Python
一看就懂得Python的math模块
Oct 21 #Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 #Python
You might like
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
javascript关于继承解析
2016/05/10 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
js实现简单的秒表
2020/01/16 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
python正则表达式抓取成语网站
2013/11/20 Python
Python3匿名函数用法示例
2018/07/25 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
如何在python中实现线性回归
2020/08/10 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
中层干部岗位职责
2013/12/18 职场文书
社区班子对照检查材料
2014/08/27 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2015年加油站工作总结
2015/05/13 职场文书
铁人观后感
2015/06/16 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS