当前位置:首页 > Python > 正文

Python Requests响应状态码检测完全指南 | Python网络请求教程

Python Requests响应状态码检测完全指南

学习如何使用Python requests库检测HTTP响应状态码,提升网络请求处理能力

为什么状态码检测很重要?

HTTP状态码是服务器对每个HTTP请求返回的3位数字代码,它们提供了请求处理结果的即时反馈。在Python网络编程中,正确检测和处理状态码对于:

  • 判断请求是否成功
  • 处理重定向和客户端错误
  • 监控网站可用性
  • 构建健壮的爬虫和API客户端

Python的requests库提供了简单直观的方式来访问和处理HTTP状态码。

安装Requests库

在开始之前,确保你已经安装了requests库。如果尚未安装,可以使用pip安装:

# 在命令行中运行以下命令
pip install requests

基础状态码检测

使用requests发送请求后,可以通过响应对象的status_code属性获取状态码:

import requests

# 发送GET请求
response = requests.get('https://api.example.com/data')

# 获取状态码
status = response.status_code
print(f"响应状态码: {status}")

# 简单判断请求是否成功
if status == 200:
    print("请求成功!")
else:
    print(f"请求失败,状态码: {status}")

HTTP状态码分类

HTTP状态码分为五个类别,每个类别有特定的含义:

1xx - 信息响应
表示请求已被接收,需要继续处理
2xx - 成功
表示请求已成功被服务器接收、理解并接受
3xx - 重定向
表示需要客户端采取进一步的操作才能完成请求
4xx - 客户端错误
表示客户端看起来可能发生了错误,妨碍了服务器的处理
5xx - 服务器错误
表示服务器在处理请求的过程中有错误或异常状态发生

高级状态码处理

Requests库提供了更便捷的方法来处理状态码:

import requests

response = requests.get('https://api.example.com/data')

# 使用内置状态码常量
if response.status_code == requests.codes.ok:
    print('200 OK')

# 检查是否为4xx或5xx错误
if response.status_code >= 400:
    print(f'错误响应: {response.status_code}')

# 使用raise_for_status()自动抛出异常
try:
    response.raise_for_status()
    print("请求成功,状态码:", response.status_code)
except requests.exceptions.HTTPError as err:
    print(f"HTTP错误发生: {err}")
提示: raise_for_status() 方法在状态码为4xx或5xx时会抛出HTTPError异常,是处理错误状态的推荐方式。

实际应用示例

网站健康检查

def check_website_health(url):
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()
        return f"网站正常 (状态码: {response.status_code})"
    except requests.exceptions.RequestException as e:
        return f"网站不可达: {str(e)}"

# 使用示例
print(check_website_health('https://www.example.com'))

API响应处理

def get_user_data(user_id):
    url = f"https://api.example.com/users/{user_id}"
    response = requests.get(url)
    
    if response.status_code == 200:
        return response.json()
    elif response.status_code == 404:
        print("用户不存在")
        return None
    else:
        response.raise_for_status()

© 2023 Python Requests状态码检测教程 | 掌握HTTP状态码处理,提升Python网络编程能力

发表评论