文章目录

一、安装
通过pip工具在命令行进行安装,建议使用指定版本避免使用差异,安装命令:
pip install requests
安装后可通过pip list命令检查当前项目下requests包的版本是否安装成功。
二、介绍
requests库是一个非常流行的HTTP客户端库,主要用于发送HTTP请求,其中requests.get方法专门用于发送HTTP get请求到指定的URL。
requests.get方法会返回一个Response对象,该对象包含了服务器返回的所有信息,其提供的常用属性/方法及描述如下:
| 属性/方法 | 描述 |
|---|---|
| r.status_code | 响应状态码 |
| r.content | 字节方式的响应体,会自动解码gzip和deflate压缩 |
| r.headers | 以字典对象存储服务器响应头,若键不存在则返回None |
| r.json() | Requests中内置的JSON解析方法,将响应体解析为JSON格式 |
| r.url | 获取实际请求的URL |
| r.encoding | 编码格式,根据响应头部的字符编码确定 |
| r.cookies | 获取服务器设置的cookies |
| r.raw | 返回原始响应体,不进行任何处理 |
| r.text | 字符串方式的响应体,会自动根据响应头部的字符编码进行解码 |
| r.raise_for_status() | 失败请求(非200响应)抛出异常 |
三、常见请求方法
requests库支持多种HTTP请求方法,核心常用方法为get、post,也可通过通用的request方法指定请求类型,核心方法定义及使用示例如下:
方法定义
python
# 发起get请求
def get(url, params=None, **kwargs)
# 发起post请求
def post(url, data=None, json=None, **kwargs)
# 支持不同请求方式,method指定请求方法(get/OPTIONS/HEAD/post/PUT/PATCH/DELETE)
def request(method, url, **kwargs)
使用示例
python
import requests
# 直接调用get/post
get_r = requests.get("https://www.baidu.com")
post_r = requests.post("https://www.baidu.com")
# 通过request方法指定请求类型
req_r1 = requests.request(method="get", url="https://www.baidu.com")
req_r2 = requests.request(method="post", url="https://www.baidu.com")
# 打印响应状态码
print("get:", get_r.status_code)
print("post:", post_r.status_code)
print("method_get:", req_r1.status_code)
print("method_post:", req_r2.status_code)
四、添加请求信息
get()、post()底层均调用request()方法,因此三个方法发送请求时传参无太大区别,可传递的核心参数及描述如下:
| 参数名 | 描述 |
|---|---|
| url | 请求的接口 |
| headers | 一个字典,包含要发送的HTTP头 |
| cookies | 一个字典、列表或者RequestsCookieJar 对象,包含要发送的cookies |
| files | 一个字典,包含要上传的文件 |
| data | 一个字典、列表或者字节串,包含要发送的请求体数据 |
| json | 一个字典,将被转换为JSON格式并发送 |
| params | 一个字典、列表或者字节串,将作为查询字符串附加到URL上 |
| auth | 一个元组,包含用户名和密码,用于HTTP认证 |
| timeout | 一个浮点数或元组,指定请求的超时时间 |
| proxies | 一个字典,包含代理服务器的信息 |
| verify | 一个布尔值或字符串,指定是否验证SSL证书 |
实际使用示例
示例1:博客详情接口(带params、headers)
python
url = "http://84.153.19.140:9090/blog/getBlogDetail"
# 定义查询参数
params = {
"blogId":9773
}
# 定义请求头信息
header = {
"user_token_header":"eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlck5hbWUiOiJ6aGFuZ3NhbiIsImV4cCI6MTczNTU1ODk2Mn0.72oh-gQ-5E6_aIcLsjotWL4ZHmgy0jF1794JDE-uUkg",
"x-requested-with":"XMLHttpRequest"
}
r = requests.post(url=url, params=params, headers=header)
print(r.json())
示例2:博客登录接口(带data)
python
url = "http://84.153.19.140:9090/user/login"
# 定义要发送的表单数据
data = {
"username":"zhangsan",
"password": "123456"
}
r = requests.post(url=url, data=data)
print(r.json())
示例3:博客园接口(带cookies、headers)
python
def test_01():
url = "https://account.cnblogs.com/user/userinfo"
# 定义请求头信息
header = {
"Accept":"application/json, text/javascript, */*; q=0.01"
}
# 定义cookie信息
cookie = {
".Cnblogs.AspNetCore.Cookies":"CfDJ8DfB03_iObVLoqH7ndAeeDgVJetjhlYbwnntg9Uy7_bcLryJ_RIEtfbgLsOt7uinPvbNd-pBCrZ_PSO5PvJVIw1lWKGW_BmqUG4pK2jDjEGKO8vaJdJ74bQWmCZW5U5wMaUO6QMrJFftQN8k31pgTbuD4X4lX-9kWMqGkzXkGkNb8C8hU_MyCqe9ZqjSDDSoPp4lFXTZ_MgBMGJLMzyw61Otnrrp2BXpw9oGbK14Q5ibK4_cAAL0cOPN1hYq1tDjbUs_CoDAyJanjddoezpNU6KQTchSOAmfFCbcuTLrDBlrHYHgnP75YE8pb4-AsJuaNrN74fBlYhJ_BQHKmvs_GJmj1L1seks5C32Lx7it67uq9be_7oDyj6ZLvTnZdryWXlucNb7EPE27P1-djOPq8MY15hSNVjO86Gcn8kDBbfyCee8Yi3exGOr026dRtPLSVjPdSbKV0st6X-d8so1oVJlKH2amdiX1Pofe7h_Yf6S-eVG_pnL6_frtvpCNbpVgApxB5Wm1yyy0UXLy31U-mVSuo5RJN6BQr4DXQ7umCz-yfpFjnZSUiuskBcwG83N3ww"
}
r = requests.post(url=url, headers=header, cookies=cookie)
print(r.json())
- 关键参数选择:params、json、data区别
- params:用于在URL中传递查询参数(Query Parameters),通常用于GET请求,也可用于其他类型请求;
- json :用于在请求体(Body)中传递JSON格式的数据,通常用于POST/PUT请求,使用时Content-Type会自动设置为
application/json; - data:用于在请求体(Body)中传递表单数据,通常用于POST/PUT请求。
五、模块核心作用
requests库专注于HTTP请求的发送,能够便捷地构造各类HTTP请求、传递请求参数、获取服务端响应数据,是Python实现接口测试的核心基础库。
在接口自动化测试中,requests库负责底层的请求发送工作,而测试用例的组织、执行、管理则需要结合pytest等测试框架来实现。