在公司的时候,需要新增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-tuplecan 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
图文来源于网络,如有侵权请联系删除。