在Python Requests中获取状态码描述

56 投票
5 回答
48529 浏览
提问于 2025-04-18 13:06

我想要输入一个服务器的响应代码,然后让Requests告诉我这个代码是什么意思。例如,代码200就表示“正常”。

我找到了一段链接,里面有源代码,它展示了这些代码和描述的字典结构。我看到Requests会根据给定的描述返回一个响应代码:

print requests.codes.processing  # returns 102
print requests.codes.ok          # returns 200
print requests.codes.not_found   # returns 404

但反过来就不行了:

print requests.codes[200]        # returns None
print requests.codes.viewkeys()  # returns dict_keys([])
print requests.codes.keys()      # returns []

我以为这应该是个简单的任务,但在网上搜索或者在文档中都找不到答案。

5 个回答

-1

requests.status_codes.codes.OK

这个用起来很不错,让我的应用代码更容易读懂。

注意,在源代码中:requests.status_codes.codes 是一种叫做 LookupDict 的类型,它重写了getitem这个方法。

你可以通过运行 dir(requests.status_codes.codes) 来查看所有支持的键。

当与FLASK一起使用时:

我喜欢使用来自flask-api插件的以下枚举:from flask_api import status,这样我可以得到更详细的HTTP状态码,比如:

status.HTTP_200_OK

2

在Python 3.x中,这段代码可以正常运行

>>> from http import HTTPStatus
>>> HTTPStatus(200).phrase
'OK'
20

我之前也遇到过同样的问题,找到了解决办法,具体可以参考这个问题

简单来说:

  • responsedata.status_code - 这个可以给你一个整数的状态码
  • responsedata.reason - 这个可以给你状态码的文字说明
30

一种可能性是:

>>> import requests
>>> requests.status_codes._codes[200]
('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '\xe2\x9c\x93')

元组中的第一个值被用作常规的代码键。

66

另外,如果你在使用 Python 2.x 版本,可以使用 httplib.responses 这个功能:

>>> import httplib
>>> httplib.responses[200]
'OK'
>>> httplib.responses[404]
'Not Found'

而如果你在使用 Python 3.x 版本,就要用 http 模块

In [1]: from http.client import responses

In [2]: responses[200]
Out[2]: 'OK'

In [3]: responses[404]
Out[3]: 'Not Found'

撰写回答