VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 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


相关教程