Python——requests——响应码

Requests 响应码详解

    • 一、响应码核心作用
    • 二、响应码分类
    • [三、Requests 常用响应码(重点,工作/面试高频)](#三、Requests 常用响应码(重点,工作/面试高频))
    • [四、Requests 响应码 实战技巧(工作必用)](#四、Requests 响应码 实战技巧(工作必用))
      • [1. 断言响应码(接口自动化核心)](#1. 断言响应码(接口自动化核心))
      • [2. 异常捕获(结合响应码排查问题)](#2. 异常捕获(结合响应码排查问题))
      • [3. 禁止重定向(特殊场景)](#3. 禁止重定向(特殊场景))
    • 五、面试高频题
      • 常用响应码有哪些?分别代表什么含义?
      • [遇到 401 错误怎么排查?](#遇到 401 错误怎么排查?)
      • [400 和 404 错误的区别?](#400 和 404 错误的区别?)
      • [500 错误和 400 错误的区别?](#500 错误和 400 错误的区别?)
      • [Requests 中如何获取响应码?如何处理重定向?](#Requests 中如何获取响应码?如何处理重定向?)
    • 六、极简总结

一、响应码核心作用

响应码(HTTP Status Code)是 服务器对客户端(Requests 发送的请求)的响应状态反馈,核心用于:

  1. 快速判断接口请求是否成功;
  2. 定位接口异常原因(比如token过期、地址错误);
  3. 接口自动化断言核心依据(必用)。

在 Requests 中,通过 res.status_code 获取响应码,示例:

python 复制代码
import requests
res = requests.get("http://xxx/api/device")
print(res.status_code)  # 输出响应码(如200、404)

二、响应码分类

HTTP 响应码共分 5 大类,每类对应不同场景,记住分类逻辑,不用死记所有码值:

分类 首位数字 核心含义 常见场景
信息响应 1xx 服务器已接收请求,正在处理 几乎不用(接口测试不关注)
成功响应 2xx 请求成功,服务器正常返回数据 接口调用成功、数据查询/提交成功
客户端错误 3xx 客户端请求有问题(参数、权限、地址) token过期、权限不足、地址错误
服务器错误 4xx 服务器内部异常,无法处理请求 代码bug、服务器宕机、接口未部署
重定向响应 5xx 请求需要进一步操作(跳转) 接口地址迁移、域名跳转(测试偶尔遇到)

三、Requests 常用响应码(重点,工作/面试高频)

按「使用频率」排序,每个码值包含:含义、Requests 场景、异常原因、解决方案,结合嵌入式/物联网测试场景说明。

(一)成功响应(2xx,最常用)

1. 200 OK(最核心)
  • 含义:请求完全成功,服务器正常返回数据;

  • 常见场景:GET 查询设备状态、POST 下发阀控指令、PUT 修改设备配置成功;

  • Requests 示例:

    python 复制代码
    res = requests.get("http://xxx/api/device/1001")
    if res.status_code == 200:
        print("接口请求成功,返回数据:", res.json())
  • 注意:200 是接口自动化断言的首选状态码(优先断言 status_code == 200,再断言返回字段)。

2. 201 Created
  • 含义:请求成功,且服务器新增了资源(比如新增设备、新增用户);
  • 常见场景:POST 新增设备台账、开户注册、提交新的测试用例;
  • 区别 200:200 是"查询/修改成功",201 是"新增成功"。
3. 204 No Content
  • 含义:请求成功,但服务器没有返回任何响应体(只有响应头);
  • 常见场景:DELETE 删除设备、清空日志(删除成功后无返回数据);
  • Requests 注意:用 res.text 会返回空字符串,无需解析响应体,只需断言状态码即可。

(二)客户端错误(4xx,异常排查重点)

1. 400 Bad Request
  • 含义:客户端请求参数错误(最常见的错误码);
  • 常见场景:
    • 下发指令时缺少必填参数(比如阀控指令少传 device_id);
    • 参数格式错误(比如把数字类型的 status 传成字符串);
    • 物联网设备接口:参数超出范围(比如阀门开度传 101,允许范围 0-100);
  • 解决方案:检查请求参数的「必填项、格式、范围」,对照接口文档修改。
2. 401 Unauthorized
  • 含义:未授权,客户端未携带登录凭证(token、cookie)或凭证无效;
  • 常见场景:
    • 接口需要 token,但请求头未携带;
    • token 过期、token 错误(比如拼写错误、未加 Bearer 前缀);
    • 嵌入式测试:设备凭证过期、未登录直接调用控制接口;
  • 解决方案:
    1. 重新登录获取有效 token;
    2. 检查 headers 中 token 的格式(比如 headers={"Authorization": "Bearer 正确token"});
    3. 确认 token 未过期(一般有效期 1-7 天)。
3. 403 Forbidden
  • 含义:禁止访问,客户端有登录凭证,但没有访问该接口的权限;
  • 常见场景:
    • 普通用户调用管理员接口(比如测试账号调用删除设备接口);
    • 设备未备案,无法调用平台接口;
    • 接口权限配置错误(比如只允许内网访问,外网请求被拦截);
  • 解决方案:联系接口开发/管理员,开通对应接口权限;确认设备已备案、访问 IP 已授权。
4. 404 Not Found
  • 含义:接口地址不存在(最易排查的错误);
  • 常见场景:
    • 接口 URL 拼写错误(比如把 /device 写成 /devcie);
    • 接口路径变更(开发修改了接口地址,未同步文档);
    • 设备离线,接口无法访问;
  • 解决方案:
    1. 核对接口文档,修正 URL 拼写;
    2. 确认接口已部署、设备已在线;
    3. 检查 IP/端口是否正确(比如把 8080 写成 8081)。
5. 405 Method Not Allowed
  • 含义:请求方式错误(比如用 GET 请求 POST 接口);
  • 常见场景:
    • 用 GET 请求下发阀控指令(阀控接口需 POST);
    • 用 POST 请求查询设备信息(查询接口需 GET);
  • 解决方案:核对接口文档,修改请求方式(比如把 requests.get 改成 requests.post)。
6. 408 Request Timeout
  • 含义:请求超时,服务器未在规定时间内响应;
  • 常见场景:
    • 网络不通、设备离线(燃气表/水表断网);
    • 服务器负载过高、接口响应慢;
    • Requests 未设置 timeout 参数,默认无超时,易卡死;
  • 解决方案:
    1. 检查网络、设备是否在线;
    2. 给 Requests 请求添加 timeout 参数(比如 timeout=5,5秒超时);
    3. 联系开发优化接口响应速度。
7. 429 Too Many Requests
  • 含义:请求过于频繁,服务器限流(防止恶意请求);
  • 常见场景:
    • 接口自动化脚本未加延迟,高频次调用接口;
    • 同一 IP 短时间内发送大量请求;
  • 解决方案:
    1. 给脚本添加延迟(比如 time.sleep(1),每次请求间隔1秒);
    2. 联系开发调整限流规则(比如放宽 IP 限制)。

(三)服务器错误(5xx,无需客户端修改,反馈开发)

1. 500 Internal Server Error
  • 含义:服务器内部异常(最常见的服务器错误);
  • 常见场景:
    • 服务器代码有 bug(比如空指针、逻辑错误);
    • 服务器宕机、重启中;
    • 接口未部署成功、依赖服务异常;
  • 解决方案:无需修改请求,反馈开发/运维,排查服务器问题(比如查看服务器日志、重启服务)。
2. 502 Bad Gateway
  • 含义:网关错误,服务器作为网关,无法连接后端服务;
  • 常见场景:
    • 物联网平台网关故障;
    • 后端服务宕机、接口未启动;
  • 解决方案:反馈开发/运维,检查网关和后端服务状态。
3. 503 Service Unavailable
  • 含义:服务器暂时不可用(比如维护、过载);
  • 常见场景:
    • 服务器正在重启、维护;
    • 服务器负载过高,无法处理新请求;
  • 解决方案:等待服务器恢复,或联系运维确认维护时间。
4. 504 Gateway Timeout
  • 含义:网关超时,服务器作为网关,等待后端服务响应超时;
  • 常见场景:
    • 后端服务响应过慢;
    • 后端服务宕机、网络堵塞;
  • 解决方案:反馈开发,优化后端服务响应速度,或检查后端服务状态。

(四)重定向响应(3xx,了解即可)

1. 301 Moved Permanently
  • 含义:请求的地址永久迁移到新地址(永久重定向);
  • 常见场景:接口域名变更、路径迁移;
  • Requests 注意:Requests 会自动跟随重定向(默认开启),无需手动处理。
2. 302 Found
  • 含义:请求的地址临时迁移到新地址(临时重定向);

  • 常见场景:临时维护、临时域名跳转;

  • 注意:若接口需要禁止重定向,可添加参数 allow_redirects=False,示例:

    python 复制代码
    res = requests.get(url, allow_redirects=False)
3. 304 Not Modified
  • 含义:请求的资源未修改,服务器返回缓存数据;
  • 常见场景:查询静态资源(比如图片、文档),缓存未过期;
  • 解决方案:无需处理,若需强制获取最新数据,可添加请求头 Cache-Control: no-cache

(五)信息响应(1xx,几乎不用)

  • 100 Continue:服务器已接收请求头,等待客户端发送请求体;
  • 101 Switching Protocols:服务器切换协议(比如从 HTTP 切换到 WebSocket);
  • 说明:接口测试中几乎不会遇到,无需重点记忆,了解即可。

四、Requests 响应码 实战技巧(工作必用)

1. 断言响应码(接口自动化核心)

python 复制代码
# 基础断言(判断请求成功)
res = requests.get(url)
assert res.status_code == 200, f"接口请求失败,状态码:{res.status_code}"

# 异常场景断言(比如删除不存在的设备,预期404)
res = requests.delete(url)
assert res.status_code == 404, f"预期返回404,实际返回:{res.status_code}"

2. 异常捕获(结合响应码排查问题)

python 复制代码
try:
    res = requests.get(url, timeout=5)
    if res.status_code == 200:
        print("请求成功:", res.json())
    elif res.status_code == 401:
        print("token过期,重新登录")
    elif res.status_code == 404:
        print("接口地址错误,请核对URL")
    elif res.status_code >= 500:
        print("服务器异常,反馈开发")
except Exception as e:
    print("请求异常:", str(e))

3. 禁止重定向(特殊场景)

python 复制代码
# 禁止自动重定向,获取重定向地址
res = requests.get(url, allow_redirects=False)
print(res.status_code)  # 输出301/302
print(res.headers.get("Location"))  # 获取重定向后的新地址

五、面试高频题

常用响应码有哪些?分别代表什么含义?

核心常用响应码:

  • 200:请求成功;201:新增资源成功;204:删除成功无返回;
  • 400:参数错误;401:未授权(token过期);403:权限不足;404:地址不存在;
  • 500:服务器内部错误;503:服务器不可用。

遇到 401 错误怎么排查?

  1. 检查请求头是否携带 token;
  2. 确认 token 格式正确(比如是否加 Bearer 前缀);
  3. 检查 token 是否过期,重新登录获取有效 token;
  4. 确认 token 未被篡改。

400 和 404 错误的区别?

400 是客户端参数错误(比如缺少必填项、格式错误);

404 是接口地址不存在(比如 URL 拼写错误、接口未部署)。

500 错误和 400 错误的区别?

500 是服务器内部异常(代码 bug、服务器宕机),无需客户端修改,反馈开发即可;

400 是客户端请求参数错误,需要客户端修改参数。

Requests 中如何获取响应码?如何处理重定向?

  1. 通过 res.status_code 获取响应码;
  2. Requests 默认自动跟随重定向,若需禁止,添加参数 allow_redirects=False

六、极简总结

  1. 响应码分 5 类:1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错)、5xx(服务器错);
  2. 工作常用:200(成功)、400(参数错)、401(未授权)、404(地址错)、500(服务器错);
  3. Requests 中用 res.status_code 获取,断言优先判断 200;
  4. 4xx 错误:客户端排查(参数、token、地址);5xx 错误:反馈开发排查服务器。
相关推荐
Ulyanov2 小时前
Apache Kafka在雷达仿真数据流处理中的应用
分布式·python·kafka·apache·雷达电子战
u0109147602 小时前
CSS如何处理超长文本换行问题_结合word-wrap属性
jvm·数据库·python
电化学仪器白超2 小时前
小乌龟Git全程图形化操作指南:嵌入式本地版本管理与Gitee私有云备份实战
git·python·单片机·嵌入式硬件·物联网·gitee·自动化
2401_837163892 小时前
如何在 Go 中正确解析带命名空间的 SOAP 响应
jvm·数据库·python
_Evan_Yao2 小时前
RAG中的“Chunk”艺术:我试过10种切分策略后总结的结论
java·人工智能·后端·python·软件工程
m0_377618232 小时前
CSS如何处理溢出隐藏_使用overflow-hidden与盒模型
jvm·数据库·python
qq_5024289902 小时前
清华大学与微软亚洲研究院出品:Kronos 本地部署教程
数据结构·python·金融量化·kronos开源模型
2301_814809862 小时前
CSS Grid布局如何解决图片溢出网格单元_设置object-fit与网格尺寸.txt
jvm·数据库·python
m0_678485453 小时前
如何在Bootstrap中自定义Modal的弹出动画效果
jvm·数据库·python