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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
Python中super函数的用法
Nov 17 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
python获取url的返回信息方法
Dec 17 Python
python实现连续图文识别
Dec 18 Python
基于python实现KNN分类算法
Apr 23 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
python Tkinter的图片刷新实例
Jun 14 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
Python Unittest原理及基本使用方法
Nov 06 Python
用python制作个视频下载器
Feb 01 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 explode函数实例代码
2012/02/27 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
JS继承 笔记
2011/07/13 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
js实现简易计算器功能
2019/10/18 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
python使用百度翻译进行中翻英示例
2014/04/14 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
详解python中init方法和随机数方法
2019/03/13 Python
python Django的web开发实例(入门)
2019/07/31 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
个人职业生涯规划书1500字
2013/12/31 职场文书
澳大利亚商务邀请函
2014/01/17 职场文书
婚礼答谢词
2015/01/04 职场文书
论文评审意见
2015/06/05 职场文书