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的Django框架来制作一个RSS阅读器
Jul 22 Python
qpython3 读取安卓lastpass Cookies
Jun 19 Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 Python
python 常用的基础函数
Jul 10 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
python在回调函数中获取返回值的方法
Feb 22 Python
Python实现元素等待代码实例
Nov 11 Python
python画蝴蝶曲线图的实例
Nov 21 Python
python requests包的request()函数中的参数-params和data的区别介绍
May 05 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
python如何正确使用yield
May 21 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 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原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
Python玩转Excel的读写改实例
2019/02/22 Python
基于python实现雪花算法过程详解
2019/11/16 Python
Python更新所有已安装包的操作
2020/02/13 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
大学生大二自我鉴定
2013/10/28 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
死亡赔偿协议书
2015/01/28 职场文书
创先争优活动个人总结
2015/03/04 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL