Requests库(四)如何传递不一样的参数

2021-03-15 16:28:28 浏览数 (1)

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来编写。

这三种常见的,大家要多总结,在上次我们不知道传递参数的时候,我们用开发者工具或者抓包看,我们可以在

可以查看到。


我是雷子,欢迎大家关注雷子说测试开发。如果感觉文章有用,点亮在看,记得点赞。

0 人点赞