HTTP状态代码到状态消息

Guy*_*man 8 python http http-status-codes

我正在寻找一种方法来从状态代码中获取HTTP消息.有没有比自己建立字典更好的方法?

就像是:

>>> print http.codemap[404]
'Not found'
Run Code Online (Sandbox Code Playgroud)

Kus*_*era 13

这个问题在 Python 3.5 以后得到解决。Python库有一个名为HTTPStatushttp的内置模块。

HTTP 状态组件(例如数字代码(值)、短语和描述)均可从属性中获得。

文档提供了这个示例:

>>> from http import HTTPStatus
>>> HTTPStatus.OK
HTTPStatus.OK
>>> HTTPStatus.OK == 200
True
>>> HTTPStatus.OK.value
200
>>> HTTPStatus.OK.phrase
'OK'
>>> HTTPStatus.OK.description
'Request fulfilled, document follows'
>>> list(HTTPStatus)
[HTTPStatus.CONTINUE, HTTPStatus.SWITCHING_PROTOCOLS, ...]
Run Code Online (Sandbox Code Playgroud)


abc*_*cdn 10

在Python 2.7中,httplib模块具有您所需的功能:

>>> import httplib
>>> httplib.responses[400]
'Bad Request
Run Code Online (Sandbox Code Playgroud)

常量也可用:

httplib.responses[httplib.NOT_FOUND]
httplib.responses[httplib.OK]
Run Code Online (Sandbox Code Playgroud)

更新

@ shao.lo在下面添加了一个有用的评论.所述http.client模块可用于:

# For Python 3 use
import http.client
http.client.responses[http.client.NOT_FOUND]
Run Code Online (Sandbox Code Playgroud)

  • 对于python3使用`import http.client`和`http.client.responses [http.client.NOT_FOUND]` (2认同)

小智 7

Python 3:

您可以用来HTTPStatus(<error-code>).phrase获取给定代码值的描述。例如这样:

try:
    response = opener.open(url, 
except HTTPError as e:
    print(f'In func my_open got HTTP {e.code} {HTTPStatus(e.code).phrase}')
Run Code Online (Sandbox Code Playgroud)

例如会给出:

In func my_open got HTTP 415 Unsupported Media Type
Run Code Online (Sandbox Code Playgroud)

这回答了问题。然而,可以从以下位置获得更直接的解决方案HTTPError.reason

try:
    response = opener.open(url, data)
except HTTPError as e:
    print(f'In func my_open got HTTP {e.code} {e.reason}')
Run Code Online (Sandbox Code Playgroud)