post请求数据格式
在做接口的时候,post 请求中可以传参 json 格式数据,也可以是www-form-urlencoded 表单格式。
发送json 格式
指定数据类型为json格式。可以从请求头中看到请求格式,请求格式为 content-type:json
import requests
import random
# 随机生成手机号码
phone = random.randint(13000000000,13999999999)
def test_register():
# 定义注册用户的地址
url = "http://49.233.108.117:28019/api/v1/user/register"
# 定义请求数据
bodydata = {
"loginName": str(phone),
"password": "123456"
}
print(bodydata)
# 发送请求 url= 表示请求地址, json= 请求数据为json格式
r = requests.post(url,json=bodydata)
# 查看发送出去的请求头信息
print(r.request.headers)
requests.post(url,json=bodydata)
json=bodydata json= 表示发送的数据为 application/json 格式。- r.request.headers 发送出去的请求的请求头信息。
执行,可以看到对应的执行结果。
发送x-www-form-urlencode 表单格式
发送数据的时候 使用 x-www-form-urlencode 格式。
在requests 请求中 发送表单格式。 将值传递给data
def test_register_with_form():
# 定义注册用户的地址
url = "http://49.233.108.117:28019/api/v1/user/register"
# 定义请求数据
bodydata = {
"loginName": str(phone),
"password": "123456"
}
print(bodydata)
# 发送请求 url= 表示请求地址, data= 请求数据为x-www-form-urlencoded 格式
r = requests.post(url,data=bodydata)
# 查看发送出去的请求头信息
print(r.request.headers)
requests.post(url,data=bodydata)
发送post请求。 data= 表示使用post请求数据格式为 x-www-form-urlencoded。
执行可以看到结果。
总结
这里数据格式 requests 已经帮我们内置好了。后面做接口测试的时候,如果开发定义的接口使用的是 json 格式,那么我们在发送请求的时候 将数据传递给json 即可。
如果开发使用的x-www-form-urlencode 格式,那么在传参的时候使用 data 即可。
比如上面商城接口中的 post请求只支持json 格式。(文档上可以看到)
如果你用 data 的话,接口就会报错。 必修将值传递给json
cookie
有些非常特殊的接口需要使用到 cookie ,需要有cookie 才能进行接口操作。
刷新 token 接口 需要使用到cookie
接口地址: http://47.100.175.62:3000/user/refresh_token
请求方式:POST
请求body : 无
请求头中需要使用到Cookie,Cookie 从浏览器中找。
在Python中使用 Cookie做接口测试,只需要将 cookie 放在信息头中就可以了。
import requests
def test_cookie():
url ="http://47.100.175.62:3000/user/refresh_token"
# 将cookie放在信息头中,使用字典格式数据
headersdata = {
"Cookie":"connect.sid=s:hQkIMC43AuG_HUzS19os_e9YAFEHwmYI.mv1iXRxKYujj4y/5kV4Ew0Sey3Z+/HLhhqA+AVt+7G8; node_club=s:6297254e8838ee3b018e0ea2$$$$.U8kp7BJ01LRCh9LebHjpnxXxDeXrbcVfH9rRT3xAE40"
}
# 发送post请求
r = requests.post(url=url,headers=headersdata)
print(r.json())
执行,可以看到返回的结果中 会更新数据。
更多关于 cookie的操作
https://requests.readthedocs.io/en/master/user/quickstart/#cookies
文件上传
请求地址: https://www.72crm.com/api-11/adminFile/upload
请求方法: Post
请求头:
Admin-Token: 4ef59b45c0e440088256b2cbd32b0c3d
请求体: 文件的路径
Content-Disposition: form-data; name="file"; filename="testdata.png"
Content-Type: image/png
首先在Postman中可以通过抓包的方式来上传成功
成功之后,选择Code
选择 python requests
可以根据 Postman生成的参考代码来修改,实现。
import requests
def test_upload():
url = "https://www.72crm.com/api-11/adminFile/upload"
# 定义文件 open 后跟文件的绝对路径 rb 表示二进制文件的读取权限。 因为图片是二进制文件,所以这里使用rb
files = [
('file', ('testdata.png', open(r'C:/Users/zengy/Desktop/testdata.png', 'rb'), 'image/png'))
]
headers = {
'Admin-Token': '4ef59b45c0e440088256b2cbd32b0c3d',
}
# files = 上传文件的固定写法
response = requests.post(url=url,headers=headers,files=files)
print(response.json())
需要注意的
- 信息头中的admin token 值使用的自己。
- files 中的文件路径 改为自己电脑上的文件路径。
文件下载
图片地址: http://47.100.175.62:3000/public/upload/9ff8a344c446c02a5709087e20950097.png
请求方式:Get
请求参数 无
请求头 无
import requests
def test_download():
url = "http://47.100.175.62:3000/public/upload/9ff8a344c446c02a5709087e20950097.png"
r = requests.get(url)
# 因为服务器返回的是一张图片, 图片是二进制文件,不是json 数据。所以不能使用 r.json()
# 二进制文件 使用 r.content
print(r.content)
# 将图片保存文件中 使用 open 因为是图片,图片是二进制文件。b (binary的缩写) 表示二进制文件。wb 二进制文件的写入权限
with open(file='data.png',mode='wb') as f:
# 将返回结果写入到文件中
f.write(r.content)
print(r.content)
服务器返回的结果数据 不是json格式的文件,使用content 表示二进制文件的内容
open() 将返回结果 写入到图片中。
- mode = ‘wb’ 一定要有b 表示二进制文件的 写入权限。
执行,可以看到执行结果。已经将图片保存到data.png
下载mp3,视频等 都是使用此方式。
import requests
def test_download_mp3():
url = "https://webfs.ali.kugou.com/202206011745/f8da598e4ea42cf7182452eefbf043cd/G032/M00/04/01/wIYBAFWfaEGAJUfNADjYpjeg83Q450.mp3"
r = requests.get(url)
print(r.content)
with open('二胡.mp3',mode='wb') as f:
f.write(r.content)
执行,可以看到
打开音乐
在mp3 文件上 ,右键【open in】—【Explorer】