当发送一个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技术站