Requests库分享系列:
Requests库(一)
Requests库(二)
Requests库(三)如何获取接口传参参数
这次分享呢,我们来看下如何传递不一样的参数。
那么接口一般都需要什么样的参数呢,其实呢,我们在上节课就有接触,一般的有下面几种。
1.json格式的
2.form表单
3.文件
4.xml格式的
5. 类传递
等等。
那么我们经常遇到的可能1,2,3比较多,4属于一些报文接口会用到。第五种呢,是现在比较流行的dubbo 协议的接口会传递类等。我们用requests都可以模拟做到。我们这次会分享我们比较常用的1,2,3。也就是json数据,form表单,文件用的比较多。
我们在之前请求钉钉数据的时候呢,用到的就是json呢。当时就是一个概括。json格式的字符串经过处理,可以处理成字典,python天生的就是对json处理很优秀的。
我们可以引入json库,官方自带。
代码语言:javascript复制import json
使用也是很简单的,我们先把参数处理成字典格式,比如
代码语言:javascript复制data={
"msgtype": "text",
"text": {
"content": "我就是我, 是不一样的烟火"
}
}
我们要处理成json 格式的字符串只需要
代码语言:javascript复制json.dumps(data)
我们可以打印下
代码语言:javascript复制print(json.dumps(data))
print(type(json.dumps(data)))
输出结果是
我们在requests请求的时候,只需要在data传递即可
代码语言:javascript复制import requests
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
'Content-Type':'application/json'
}
data={
"msgtype": "text",
"text": {
"content": "我就是我, 是不一样的烟火"
}
}
r=requests.post("https://oapi.dingtalk.com/robot/send?access_token=你要传递自己钉钉机器人的token",headers=headers,data=(data))
print(r.json())
当然了,其他接口的道理也是一样的。如果不是json格式的参数,接口会返回错误。比如我们headers也需要现在Content-Type为json的,如果不定义那么就会返回类似的提示错误
如果参数类型错误,也会返回错误的。
from表单的处理也是很简单的,还是规定对应的参数。比如我们去请求百度的时候呢,携带一个form表单的参数
代码语言:javascript复制data={
'username':'1243',
"password":"test"
}
参数是这样的,那么我们请求的时候怎么请求呢
代码语言:javascript复制data={
'username':'1243',
"password":"test"
}
r=requests.post("http://www.baidu.com",data=data)
这样请求即可。那么我们看下如何带文件的请求呢
代码语言:javascript复制data={
'username':'1243',
"password":"test"
}
files={
"avar" : (open("name.txt", "rb"))
}
r=requests.post("http://www.baidu.com",data=data,files=files)
很简单,我们在请求的时候呢,增加files字段,files是一个字典,key是接口接受的参数的字段。value就是一个元祖,代表着你处理的参数,open就是文件的打开方式,方式rb,这样就可以带着本地的文件去上传了。
多个文件的方式,如下:
代码语言:javascript复制files={
"testwenjian" : (open("name.txt", "rb")),
"testwenjian2" : (open("name.txt", "rb")),
"testwenjian3" : (open("name.txt", "rb"))
}
当然了,由于是字典可以带着很多的文件的,还可以配合form表单去传递更多的数据。官方推荐的是元祖的方式
代码语言:javascript复制"field1" : [
("filename1", open("filePath1", "rb")),
("filename2", open("filePath2", "rb"), "image/png"),
open("filePath3", "rb"),
open("filePath4", "rb").read()
]
我比较喜欢用字典的格式,requests最后也是把字典转换成元祖形式。我比较喜欢用字典,所以一直用的字典的格式。
第四种由于接口使用较少,不再秒速,第五种类传递这个需要有python微服务框架处理的接口后才能测试,Java dubbo的还是需要用java来编写。
这三种常见的,大家要多总结,在上次我们不知道传递参数的时候,我们用开发者工具或者抓包看,我们可以在
可以查看到。
我是雷子,欢迎大家关注雷子说测试开发。如果感觉文章有用,点亮在看,记得点赞。