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 错误:反馈开发排查服务器。
相关推荐
笨鸟先飞,勤能补拙1 天前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能1 天前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂1 天前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study1 天前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境1 天前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境1 天前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1231 天前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102161 天前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb001 天前
一个项目带你入门AI应用开发01
python
0566461 天前
Python康复训练——常用标准库
开发语言·python·学习