Requests报”requests.exceptions.HTTPError: {http status code} {reason} “的原因以及解决办法

  • Post category:Python

当使用Requests库向服务器发起请求时,有可能会遇到HTTPError异常,提示信息为”requests.exceptions.HTTPError: {http status code} {reason}”。这个错误的原因通常是服务器返回的HTTP状态码是4xx或5xx,表示请求出现问题。常见的状态码如下:

  • 400:客户端请求错误,如缺少参数、格式不正确等。
  • 401:未授权,需要登录认证。
  • 403:禁止访问,一般是权限不足。
  • 404:请求的资源不存在。
  • 500:服务器内部错误。

下面介绍解决这个问题的完整攻略:

  1. 获取请求的响应对象

在使用Requests库发起请求时,可以通过调用相应的方法返回一个响应对象,例如:response = requests.get(url)。当出现HTTPError异常时,可以通过捕获异常来获取响应对象,然后从响应对象中获取更详细的错误信息。

import requests

try:
    response = requests.get(url)
    response.raise_for_status()  # 如果状态码不是200,将会抛出HTTPError异常
except requests.exceptions.HTTPError as e:
    print(f"HTTPError: {e.response.status_code} {e.response.reason}")
  1. 处理常见的状态码

对于常见的状态码,可以通过捕获异常并处理特定状态码的方式来解决问题。

import requests

try:
    response = requests.get(url)
    response.raise_for_status()  # 如果状态码不是200,将会抛出HTTPError异常
except requests.exceptions.HTTPError as e:
    if e.response.status_code == 404:
        print("请求的资源不存在")
    elif e.response.status_code == 401:
        print("未授权,请登录认证")
    elif e.response.status_code == 403:
        print("禁止访问,权限不足")
    else:
        print(f"HTTPError: {e.response.status_code} {e.response.reason}")
  1. 自定义错误处理函数

Requests库提供了自定义异常处理函数的功能,可以通过定义一个异常处理函数来处理HTTPError异常和其他异常,从而在请求出现错误时自动使用该函数进行处理。

import requests

def handle_exception(e):
    if isinstance(e, requests.exceptions.HTTPError):
        if e.response.status_code == 404:
            print("请求的资源不存在")
        elif e.response.status_code == 401:
            print("未授权,请登录认证")
        elif e.response.status_code == 403:
            print("禁止访问,权限不足")
        else:
            print(f"HTTPError: {e.response.status_code} {e.response.reason}")
    else:
        print(f"{e.__class__.__name__}: {str(e)}")

requests.Session().hooks["response"].append(handle_exception)

以上就是解决Requests库出现”requests.exceptions.HTTPError: {http status code} {reason}”异常的完整攻略,希望对大家有所帮助。