python request file upload_Python基于requests实现模拟上传文件

方法1:

1.安装requests_toolbelt依赖库

#代码实现

def upload(self):

login_token = self.token.loadTokenList()

for token in login_token:

tempPassword_url = self.config['crm_test_api']+'/document/upload'

tempPassword_data = self.data_to_str.strToDict('''title:1.png

course_name_id:63

course_id:1112

desc:7

doc_type:1

is_public:1''',value_type='str')

files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}

tempPassword_data.update(files)

m = MultipartEncoder(

fields=tempPassword_data

)

tempPassword_headers = {"Content-Type": m.content_type, "token": token}

tempPassword_request = requests.post(url=tempPassword_url,data=m,headers=tempPassword_headers)

print(tempPassword_request.content)

2.组装MultipartEncoder对象需要的参数:将tempPassword_data的字段合并至files

1.files参数介绍:

1.字典key对应file字段(我们系统是这样,具体结合前端实际的字段为准),如图

aaaencu1tpb.png

2.字典value里面的对象:

1.filename(服务器最终存储的文件名)

2.filepath(具体的文件路径,注意转义),文件是以二进制的形式进行传输的,所以这里传输时以二进制的形式打开文件并传输

3.content_type:具体结合前端实际的字段为准:一般可定义为: 文本(text)/图片(image)等[/code][code]

3.tempPassword_data:为文件上传时的附带参数

strToDict方法:自己手写的一个字符串转dict的方法

遇到的问题:

b40pfobu3pl.png

这个错误是说,int对象不能被编码,所以需要手动将int对象转换为str,所以我在此方法中定义了value_type这个参数,用于将字典中的所有value转换为str类型

#具体代码实现,仅供参考

def strToDict(str_in,value_type=None):

# value_type:转换字典的value为指定的类型,未防止异常,目前仅支持str

# '''将str转换为dict输出'''

# '''将带有time关键字的参数放到字符串末尾'''

# print(str_in)

if str_in:

match_str = ':'

split_str = '\n'

split_list = str_in.split(split_str)

str_in_dict = {}

for i in split_list:

colon_str_index = i.find(match_str)

if colon_str_index == -1:

# '''处理firefox复制出来的参数'''

match_str = '\t' or ' '

colon_str_index = i.find(match_str)

# '''去掉key、value的空格,key中的引号'''

str_in_key = i[:colon_str_index].strip()

str_in_key = str_in_key.replace('"','')

str_in_key = str_in_key.replace("'",'')

# 正则过滤无用key,只保留key第一位为字母数据获取[]_

str_sign = re.search('[^a-zA-Z0-9\_\[\]+]', str_in_key[0])

if str_sign is None:

# 处理value中的空格与转义符

str_in_value = i[colon_str_index + 1:].strip()

str_in_value=str_in_value.replace('\\','')

try:

# 遇到是object类型的数据转换一下

str_in_value=eval(str_in_value)

except BaseException as error:

str_in_value=str_in_value

if value_type in ['str','string']:

str_in_value=str(str_in_value)

else:

str_in_value=str_in_value

str_in_dict[str_in_key] = str_in_value

return str_in_dict

else:

print("参数都没有,还处理个球嘛")

return None

3.请求时将headers的content设置为m.content_type,会设置headers的content_type为form—data,类型为str:

MultipartEncoder相关源码:

awvw320yifu.png

d2fcq1lyv4d.png

4.请求时设置data为m,会输出一个MultipartEncoder对象:

zmod3njgt0k.png

方法2:

直接使用requests,无需依赖requests_toolbelt库

过程大同小异,也是需要将字典的value转换为str

注意:headers不要传content_type字段,headers不要传content_type字段,headers不要传content_type字段

请求时:data对应附加参数,files对应files对象

#相关代码

def upload(self):

login_token = self.token.loadTokenList()

for token in login_token:

tempPassword_url = self.config['crm_test_api']+'/document/upload'

tempPassword_data = self.data_to_str.strToDict('''title:1.png

course_name_id:63

course_id:1112

desc:7

doc_type:1

is_public:1''',value_type='str')

files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}

tempPassword_headers = {"token": token}

tempPassword_request = requests.post(url=tempPassword_url,data=tempPassword_data,files=files,headers=tempPassword_headers)

print(tempPassword_request.json())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Python基于requests实现模拟上传文件

本文地址: http://www.cppcns.com/jiaoben/python/309090.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算...

本节书摘来自异步社区《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》一书中的第6章,第6.5节光照的每顶点计算与每片元计算,作者 吴亚峰,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.5 光照…

如何在Debian上安装配置ownCloud

如何在Debian上安装配置ownCloud 据其官方网站,ownCloud可以让你通过一个Web界面或者WebDAV访问你的文件。它还提供了一个平台,可以轻松地查看、编辑和同步您所有设备的通讯录、日历和书签。尽管ownCloud与广泛使用Dropbox非常相似,但主要区别…

[转]js判断url是否有效

本文转自:http://www.cnblogs.com/fumj/p/3490121.html 方法一:(仅适用于ie) function CheckStatus(url){XMLHTTP new ActiveXObject("Microsoft.XMLHTTP")XMLHTTP.open("HEAD",url,false)XMLHTTP.send()return XMLHTTP.status200}function Ne…

32位md5解密_冰蝎特征检测及报文解密

点击“蓝字”关注我们,不迷路~‍‍前言19年驻场于某金融单位。参加19年9月、11月两次攻防演练,负责攻防演练组织、技术支持和复盘。期间,多个攻击队伍使用冰蝎 webshell ,防守方监测时确实各 IDS 确实报出 webshell 连接&#xff…

《移动App测试的22条军规》—App测试综合案例分析23.13节测试微信App的流量和电量消耗...

本节书摘来自异步社区《移动App测试的22条军规》一书中的App测试综合案例分析,第23.13节测试微信App的流量和电量消耗,作者黄勇,更多章节内容可以访问云栖社区“异步社区”公众号查看。 23.13 测试微信App的流量和电量消耗关于微信App消耗流…

python做数据可视化的代码_Python数据可视化正态分布简单分析及实现代码

Python说来简单也简单,但是也不简单,尤其是再跟高数结合起来的时候。。。 正态分布(Normaldistribution),也称“常态分布”,又名高斯分布(Gaussiandistribution),最早由A…

wpf window 不执行show 就不能load执行_Numpy反序列化命令执行漏洞分析(CVE-2019-6446)附0day...

1、介绍 NumPy 是 Python 机器学习库中之一,主要对于多为数组执行计算。NumPy 提供大量的 函数和操作,能够帮助程序员便利进行数值计算。在 NumPy 1.16.0 版本之前存在反序列化 命令执行漏洞,用户加载恶意的数据源造成命令执行。2、环境 软件…

使用Def文件导出dll

前面我们介绍了dll的生成,大多数是使用extern "C"__declspec(dllexport)函数名的方法导出dll。其实我们还有另一种方法来导出dll。 先介绍参考文献: 1.dll导出声明相关 2.VS2012中 C创建DLL图解 3.DLL中导出函数的两种方式(dllexport与.…

XML语法学习

本文章集合两篇博文而写&#xff0c;两篇博文地址&#xff1a; XML学习总结(二)——XML入门&#xff1a; XML基础<第一篇> XML简介 XML是一种标记语言&#xff0c;用于描述数据&#xff0c;它提供一种标准化的方式来来表示文本数据。XML文档以.xml为后缀。需要彻底注…

FM实现F4帮助系列三:弹出框多筛选…

FM实现F4帮助系列三&#xff1a;弹出框多筛选条件的搜索帮助&#xff08;根据搜索帮助筛选字段&#xff09;函数&#xff1a;F4IF_GET_SHLP_DESCRF4IF_START_VALUE_REQUEST效果图&#xff1a;本例子代码&#xff1a;找到需要的帮助:*&------------------------------------…

《计算复杂性:现代方法》——0.2 判定问题/语言

本节书摘来自华章计算机《计算复杂性&#xff1a;现代方法》一书中的第0章&#xff0c;第0.2节&#xff0c;作者 &#xff3b;美&#xff3d;桑杰夫阿罗拉&#xff08;Sanjeev Arora&#xff09;&#xff0c;博阿兹巴拉克&#xff08;Boaz Barak&#xff09;&#xff0c;译 骆吉…

python从date目录导入数据集_使用python划分数据集

无论是训练机器学习或是深度学习&#xff0c;第一步当然是先划分数据集啦&#xff0c;今天小白整理了一些划分数据集的方法&#xff0c;希望大佬们多多指教啊&#xff0c;嘻嘻~ 首先看一下数据集的样子&#xff0c;flower_data文件夹下有四个文件夹&#xff0c;每个文件夹表示一…

开源牛人 zcbenz

事情是这样的&#xff0c;微软推出了Visual Studio Code&#xff0c;我很好奇他怎么做跨平台的&#xff0c;所以就找找资料&#xff0c;在他的网站中是这么描述的&#xff1a; Architecturally, Visual Studio Code combines the best of web, native, and language-specific t…

eclipse 与 tomcat 的那些路径

我们用mvn创建了一个web工程&#xff0c;同时希望在eclipse里调试开发。mvn有mvn的路径要求&#xff0c;eclispe有eclipse的默认路径&#xff0c;怎么整合二者&#xff1f; 首先介绍一下eclipse的默认路径。 重点在Server Locations里面。 下面我们把[workspace]/.metadata\.pl…

python数据处理常用函数_pandas数据分析常用函数总结大全:上篇

基础知识在数据分析中就像是九阳神功&#xff0c;熟练的掌握&#xff0c;加以运用&#xff0c;就可以练就深厚的内力&#xff0c;成为绝顶高手自然不在话下&#xff01; 为了更好地学习数据分析&#xff0c;我对于数据分析中pandas这一模块里面常用的函数进行了总结。整篇总结&…

从运维角度浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的&#xff0c;它是随着用户量的增加&#xff0c;基础架构才逐渐完善。这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案&#xff0c;暂且抛开前端应用不说&#xff0c;大致分为以下五个阶段&#x…

c语言c99标准_自学C语言之一

上次自学C语言还是在刚开学到国庆期间&#xff0c;听学姐的建议买了本C语言的书&#xff0c;在军训期间的晚上翻翻看看。后来选课、开始正式上课、面试社团、开各种会等等&#xff0c;好像每天都有许多事要忙&#xff0c;但又没忙出来什么结果&#xff0c;慢慢地好像就把C语言放…

Font Rending 的 Hint 机制对排版的影响

Font Rending 的 Hint 机制对排版的影响【转】 在设计一种 Font 时&#xff0c;设计者使用的是一个抽象的单位&#xff0c;叫做 EM&#xff0c;来源于大写 M 的宽度&#xff08;通常英文字体中大写 M 的宽度最大&#xff09;。EM 即不同于在屏幕显示时用的像素&#xff08;Pixe…

《SQL初学者指南(第2版)》——2.4 指定列

本节书摘来自异步社区出版社《SQL初学者指南&#xff08;第2版&#xff09;》一书中的第2章&#xff0c;第2.4节&#xff0c;作者&#xff1a;【美】Larry Rockoff&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.4 指定列 到目前为止&#xff0c;我们只…

《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.13 创建视图...

本节书摘来自异步社区出版社《PowerShell V3—SQL Server 2012数据库自动化运维权威指南》一书中的第2章&#xff0c;第2.13节&#xff0c;作者&#xff1a;【加拿大】Donabel Santos&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.13 创建视图 本方案展…