当前位置:
首页 > temp > python入门教程 >
-
关于Python的requests库对Form Data请求格式的方式
在公司的时候,需要新增1000多条的促销,促销那边因为是Java组开发的,所以具体怎么回事我们Python组并不知道,测试人员需要加入促销1000多进行压测,所以任务就到了我们Python这边。
打开控制台,我们可以看到它的请求体其实是Form Data格式的,这时,requests库中的参数data,json等请求就会出现异常,异常的报错我这边遇到的就是param未传,
解决的办法也很简单,因为Form Data的请求其实是multipart/form-data 其实是这种格式的,虽然笔者主要做的是自动化开发,但是有关Python的Django框架也熟悉点,知道这种请求格式其实在Django后台的接受方法应该是 request.Files() 的格式,所以猜测是不是请求体应该用files,然后Ctrl B在pycharm里看了一下reqeusts的源码,发现还真有一个参数是files,再看一下reqeusts对它的解释,所以就大胆猜测请求的形参应该就是files。下面呢,是requests对这个files参数的详细介绍,笔者英文六级没过,不敢为大家随意翻译,请大家自己看吧。
Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers to add for the file. 为此,参数里面已经告知,请求应为{"name",(...)}的形式,所以我的参数初步定为{"param",(具体需要携带的数据)},但是请求的时候发现还是失败,然后仔细阅读之后,发现落下了一句话:file-tuple can be a 2-tuple ,那既然我们直接请求是不可以的,我们就才用2元组的形式进行请求,但是参数里面的filename我们没有,那就是用None来代替,所以改成:{"param":(None,"你需要携带的参数")}, 果然这样请求的就没有问题了。
import requets uparams = {"param":(None,"""携带的具体参数""")} rep = requests.post(urlupdata, files=uparmas).json() print(rep)
然后就请求成功了。博客园笔者自己所写,转发请标明出处,谢谢读者。
出处:https://www.cnblogs.com/Pyxin/p/15088632.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数