post请求数据格式

在做接口的时候,post 请求中可以传参 json 格式数据,也可以是www-form-urlencoded 表单格式。

发送json 格式

image.png
指定数据类型为json格式。可以从请求头中看到请求格式,请求格式为 content-type:json
image.png

  1. import requests
  2. import random
  3. # 随机生成手机号码
  4. phone = random.randint(13000000000,13999999999)
  5. def test_register():
  6. # 定义注册用户的地址
  7. url = "http://49.233.108.117:28019/api/v1/user/register"
  8. # 定义请求数据
  9. bodydata = {
  10. "loginName": str(phone),
  11. "password": "123456"
  12. }
  13. print(bodydata)
  14. # 发送请求 url= 表示请求地址, json= 请求数据为json格式
  15. r = requests.post(url,json=bodydata)
  16. # 查看发送出去的请求头信息
  17. print(r.request.headers)
  • requests.post(url,json=bodydata) json=bodydata json= 表示发送的数据为 application/json 格式。
  • r.request.headers 发送出去的请求的请求头信息。

执行,可以看到对应的执行结果。
image.png

发送x-www-form-urlencode 表单格式

image.png
发送数据的时候 使用 x-www-form-urlencode 格式。
在requests 请求中 发送表单格式。 将值传递给dataimage.png

  1. def test_register_with_form():
  2. # 定义注册用户的地址
  3. url = "http://49.233.108.117:28019/api/v1/user/register"
  4. # 定义请求数据
  5. bodydata = {
  6. "loginName": str(phone),
  7. "password": "123456"
  8. }
  9. print(bodydata)
  10. # 发送请求 url= 表示请求地址, data= 请求数据为x-www-form-urlencoded 格式
  11. r = requests.post(url,data=bodydata)
  12. # 查看发送出去的请求头信息
  13. print(r.request.headers)

requests.post(url,data=bodydata) 发送post请求。 data= 表示使用post请求数据格式为 x-www-form-urlencoded。
执行可以看到结果。
image.png

总结

这里数据格式 requests 已经帮我们内置好了。后面做接口测试的时候,如果开发定义的接口使用的是 json 格式,那么我们在发送请求的时候 将数据传递给json 即可。
如果开发使用的x-www-form-urlencode 格式,那么在传参的时候使用 data 即可。
比如上面商城接口中的 post请求只支持json 格式。(文档上可以看到)
image.png
如果你用 data 的话,接口就会报错。 必修将值传递给json

cookie

有些非常特殊的接口需要使用到 cookie ,需要有cookie 才能进行接口操作。
刷新 token 接口 需要使用到cookie
接口地址: http://47.100.175.62:3000/user/refresh_token
请求方式:POST
请求body : 无
请求头中需要使用到Cookie,Cookie 从浏览器中找。
image.png
在Python中使用 Cookie做接口测试,只需要将 cookie 放在信息头中就可以了。

  1. import requests
  2. def test_cookie():
  3. url ="http://47.100.175.62:3000/user/refresh_token"
  4. # 将cookie放在信息头中,使用字典格式数据
  5. headersdata = {
  6. "Cookie":"connect.sid=s:hQkIMC43AuG_HUzS19os_e9YAFEHwmYI.mv1iXRxKYujj4y/5kV4Ew0Sey3Z+/HLhhqA+AVt+7G8; node_club=s:6297254e8838ee3b018e0ea2$$$$.U8kp7BJ01LRCh9LebHjpnxXxDeXrbcVfH9rRT3xAE40"
  7. }
  8. # 发送post请求
  9. r = requests.post(url=url,headers=headersdata)
  10. print(r.json())

执行,可以看到返回的结果中 会更新数据。
image.png

更多关于 cookie的操作
https://requests.readthedocs.io/en/master/user/quickstart/#cookies

文件上传

请求地址: https://www.72crm.com/api-11/adminFile/upload
请求方法: Post
请求头:

  1. Admin-Token: 4ef59b45c0e440088256b2cbd32b0c3d

请求体: 文件的路径

Content-Disposition: form-data; name="file"; filename="testdata.png"
Content-Type: image/png

首先在Postman中可以通过抓包的方式来上传成功
image.png
成功之后,选择Code
image.png
选择 python requests
image.png
可以根据 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())

需要注意的

  1. 信息头中的admin token 值使用的自己。
  2. files 中的文件路径 改为自己电脑上的文件路径。

执行,可以看到执行结果
image.png

文件下载

图片地址: 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
image.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)

执行,可以看到
image.png
打开音乐
在mp3 文件上 ,右键【open in】—【Explorer】
image.png