requests 请求库

做接口测试的时候,需要将请求发送给服务器,需要网络请求,requests 库是python中主要用来模拟网络请求的库。 使用requests 可以模拟get ,post ,put,delete 等这些网络请求。

requests 不是Python官方自带的,使用的时候需要我们进行安装。它是一个第三方的库。

pip 包管理器

安装第三方包的时候可以通过pip 命令进行在线下载安装(功能类似于平时我们使用手机在应用商店安装的app原理类似)

安装requests

常用的安装包的方式有两种。

  • 一种通过命令行使用命令安装
  • 在Pycharm中通过搜索下载安装。

    命令行安装

    打开pycharm 底部 terminal 命令行
    image.png
    命令行中输入
    1. pip install requests
    默认使用 pip 命令进行下载的时候,是从国外的服务器下载的。如果网络比较慢,有可能会下载失败。比如提示下面这个。下载失败。
    image.png

    使用国内pip 镜像站提高下载速度

    从国外服务器下载速度受限,可以使用国内的镜像站进行下载。
    只需在命令行配置一下即可。
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    
    上面的命令配置下载使用 国内镜像,后面安装其他第三方的包都是从国内的服务器下载。

通过pycharm进行安装

打开【File】—【Setting】
image.png
找到 项目配置
image.png
搜索安装 requests
image.png

安装成功

在项目配置中可以看到 有requests 包的信息,表示安装成功。
image.png

pycharm 中配置国内下载镜像地址

在项目配置中点击 【+】
image.png
安装选项中 选择【manage reposties】
image.png
将原来的地址进行修改
image.png
更改地址为

https://pypi.tuna.tsinghua.edu.cn/simple

发送get请求

使用requests 库发送get 请求


# 导入 requests 模块

import requests

# 发送一个get 请求
reps = requests.get("http://47.100.175.62:3000/api/v1/topics")
# 打印返回结果的状态码
print(reps.status_code)

# 打印返回结果的json值
print(reps.json())

请求成功可以看到服务器返回结果
image.png

get 请求参数 params

get 请求发送的时候 请求的参数 放在 字典中,调用get 请求 需要将请求的数据传递给params

# 导入 requests 模块
import requests

# 默认请求前缀
base_url = "http://47.100.175.62:3000/api/v1"

def test_get_param():
    # 请求地址
    url = base_url+"/topics"
    # 请求参数
    query = {
        "page":1,
        "tab":"ask",
        "limit":10,
        "mdrender":"false"
    }
    # 发送get请求    params 固定写法 将参数传递给 params
    r = requests.get(url,params=query)
    # 状态码
    print(r.status_code)
    # 返回结果
    print(r.json())

if __name__ == '__main__':
    test_get_param()

发送post 请求

在做post请求的时候,请求的数据可以是 x-www-form-urlencode 表单格式,也可以是是json格式。
image.png
在requests post 请求中函数的定义:
post的的请求参数中:

  • url 请求地址
  • data 如果请求的数据格式为 x-www-form-urlencoded 表单格式,将数据传递给 data 字段。
  • json 如果请求的数据为 json 格式, 那么需要将参数传递给json。

    发送json格式数据

    将请求数据传递给 json ```python import requests

    默认请求前缀

    base_url = “http://47.100.175.62:3000/api/v1“ def test_post(): url = base_url+”/topics” body_data = {
      "accesstoken":"0c809962-4b8a-431c-b780-9a110264bd80",
      "title":"helloworld",
      "tab":"ask",
      "content":"xxxxxxxxxxxx"
    
    }

    发送json 格式数据

    r = requests.post(url,json=body_data)

    打印请求头信息 r.request.headers 请求头信息 请求数据格式为json

    print(r.request.headers)

    打印返回结果

    print(r.json())

if name == ‘main‘: test_post()

执行,可以看到执行的结果。
```python
{'User-Agent': 'python-requests/2.27.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '119', 'Content-Type': 'application/json'}
{'success': True, 'topic_id': '625a64b988e6be03a6f10b02'}

image.png

发送表单格式的数据

在post请求中,表单格式数据 传递个data 参数

# 默认请求前缀
base_url = "http://47.100.175.62:3000/api/v1"
def test_post_data():
    url = base_url + "/topics"
    body_data = {
        "accesstoken": "0c809962-4b8a-431c-b780-9a110264bd80",
        "title": "helloworld",
        "tab": "ask",
        "content": "xxxxxxxxxxxx"
    }
    # 发送数据格式为表单格式。
    r = requests.post(url, data=body_data) 
    # 打印请求头信息  r.request.headers 请求头信息
    print(r.request.headers)
    # 打印返回结果
    print(r.json())


if __name__ == '__main__':
    test_post_data()

image.png
需要注意:在post请求的时候,需要传递不同格式,如果是 表单格式,这里一定要传值给 data
如果是json 格式,传值给json。
在上面的cnode社区接口中 post 请求两种格式都支持,所以你将数据传递给data 或者传递给 json 都是的可以的。
但是下面这个请求必须传递给json。

练习

用户注册

新风商城 注册用户 接口。
请求方式:Post
请求地址:http://49.233.108.117:28019/api/v1/user/register
请求数据类型: json
请求body:

{
  "loginName": "string",
  "password": "string"
}

请使用 python 注册一个用户

# 导入生成的手机号
from common.utils import generate_phone
# 生成随机的一个手机号
phone = generate_phone()

def test_register():
    url = "http://49.233.108.117:28019/api/v1/user/register"
    body_data = {
        "loginName": phone,  # 传入手机号
        "password": "123456"
    }
    print(f"使用数据进行注册:{body_data}")
    r = requests.post(url,json=body_data)
    # 打印请求的信息头
    print(r.request.headers)
    # 打印返回结果
    print(r.json())


if __name__ == '__main__':
    test_register()

用户登录

登录接口
请求地址: http://49.233.108.117:28019/api/v1/user/login
请求数据类型: json
请求body:

{
  "loginName": "string",
  "passwordMd5": "string"
}

测试用户登录,需要使用同一个手机号码 ,先注册成功,在进行登录。
需注意:密码需要进行md5 加密。
使用网站:https://tool.chinaz.com/tools/md5.aspx

# 导入生成的手机号
from common.utils import generate_phone
import requests
# 1. 设置手机号 后面函数中使用手机号 都从这里获取
phone = generate_phone()

# 用户注册
def test_register():
    url = "http://49.233.108.117:28019/api/v1/user/register"
    body_data = {
        "loginName": phone,
        "password": "123456"
    }
    print(f"使用数据进行注册:{body_data}")
    r = requests.post(url,json=body_data)
    # 打印请求的信息头
    print("注册的请求头", r.request.headers)
    # 打印返回结果
    print("注册结果", r.json())


# 用户登录
def test_login():
    url = "http://49.233.108.117:28019/api/v1/user/login"
    body_data = {
      "loginName": phone,
      "passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"
    }
    print(f'使用数据进行登录 {body_data}')
    r = requests.post(url,json=body_data)
    # 打印出响应状态码 服务器返回结果
    print("登录结果返回结果",r.status_code,r.json())

if __name__ == '__main__':
    # 注册和登录的时候需要使用到同一个手机号码
    test_register()
    test_login()

image.png

总结

requests库 基础 - 图15 Python接口requests.mp4 (256.62MB)python requests库.mp4 (1.97GB)