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)
小智 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)