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基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
Python使用metaclass实现Singleton模式的方法
May 05 Python
python编码最佳实践之总结
Feb 14 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
Python Socket编程详细介绍
Mar 23 Python
Sanic框架应用部署方法详解
Jul 18 Python
python实现多层感知器
Jan 18 Python
24式加速你的Python(小结)
Jun 13 Python
详解Python3中setuptools、Pip安装教程
Jun 18 Python
如何更优雅地写python代码
Jul 02 Python
pytorch常见的Tensor类型详解
Jan 15 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 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面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
Exception类的常用方法
2012/06/16 面试题
大学生简单自荐信
2013/11/10 职场文书
活动邀请函范文
2014/01/19 职场文书
房地产营销策划方案
2014/02/08 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
城南旧事读书笔记
2015/06/29 职场文书