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实现电子词典
Apr 23 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
Python3.5 创建文件的简单实例
Apr 26 Python
详解python中的装饰器
Jul 10 Python
详解python Todo清单实战
Nov 01 Python
python 默认参数相关知识详解
Sep 18 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
Python基础之进程详解
May 21 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查找字符串出现次数的方法
2014/12/01 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
Python isinstance函数介绍
2015/04/14 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
python机器学习之神经网络(二)
2017/12/20 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
python isinstance函数用法详解
2020/02/13 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
抽样调查项目计划书
2014/04/24 职场文书
广播体操口号
2014/06/18 职场文书
留学推荐信英文范文
2015/03/26 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server