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

当发送一个HTTP请求后,我们可能会遇到如下错误提示:

requests.exceptions.HTTPError: {http status code} {reason}

这个错误通常表示收到了一个HTTP错误响应,例如404(请求页面不存在)或500(服务器内部错误)。这时候需要分析原因并解决。下面是几个排查和解决该错误的步骤。

步骤1:打印HTTP响应

在HTTP请求的响应中获取HTTP异常代码和原因。可以使用以下代码:

import requests
response = requests.get('https://example.com/')
print(response.status_code, response.reason)

也可以使用HTTP库自己的方法,如httplib:

import httplib
conn = httplib.HTTPSConnection("example.com")
conn.request("GET", "/")
response = conn.getresponse()
print(response.status, response.reason)

步骤2:分析HTTP异常代码

HTTP异常代码通常在100到599之间。以下是一些常见的HTTP异常代码和各自的含义:

  • 200: OK(请求成功)
  • 201: Created(请求已被创建)
  • 202: Accepted(请求已被接受,但未被处理完)
  • 204: No Content(服务器没有新数据返回)
  • 400: Bad Request(请求无效)
  • 401: Unauthorized(未授权)
  • 403: Forbidden(禁止访问)
  • 404: Not Found(请求的资源不存在)
  • 405: Method Not Allowed(请求方法不允许)
  • 408: Request Timeout(请求超时)
  • 500: Internal Server Error(服务器内部错误)
  • 501: Not Implemented(请求方法未被实现)

步骤3:处理HTTP异常

针对不同的HTTP异常代码,可以采取不同的处理方式。以下是几个常见的处理方式:

301/302 重定向

当遇到301/302跳转时,需要将请求地址改为跳转地址。可以使用以下代码:

import requests
response = requests.get('https://example.com/', allow_redirects=False)
if response.status_code == 301:
    redirect_url = response.headers['Location']
    response = requests.get(redirect_url)
print(response.content)

401/403 权限验证

当遇到401或403错误时,需要进行权限验证。可以使用以下代码:

import requests
from requests.auth import HTTPBasicAuth
response = requests.get('https://example.com/admin', auth=HTTPBasicAuth('user', 'pass'))
if response.status_code == 401:
    print("认证失败!")
    return
print(response.content)

404 页面不存在

当遇到404错误时,需要定位问题,最好联系系统管理员或开发者。如果您正在尝试爬取网站,可以使用以下代码:

import requests
response = requests.get('https://example.com/notexist')
if response.status_code == 404:
    print("该网站没有此页面!")

500 服务器内部错误

当遇到500错误时,很有可能是服务器内部出现问题。需要通知系统管理员或开发者进行修复。如果您正在尝试爬取网站,可以使用以下代码:

import requests
response = requests.get('https://example.com/internalerr')
if response.status_code == 500:
    print("很遗憾服务器出现了问题,请稍后再试。")

总结

在Python中,我们可以使用requests库或底层HTTP库进行网络请求,在网络请求中如果遇到了HTTP异常,就需要分析代码并采取不同的处理方式。因此,熟悉HTTP状态码,以及如何处理HTTP异常代码是非常重要的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Requests报”requests.exceptions.HTTPError: {http status code} {reason} “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月18日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部