我在 Python3 中编写了一个简短的函数来解析 HTTP header 。我想知道是否有人能够看一下它并告诉我是否可以做一些不同的事情来使代码更好。我目前所用的产生了所需的结果,但我不确定是否会出现此代码无法产生所需结果的情况。
这是我的:
def _parse_headers(self, headers):
lines = headers.split("\r\n")
info = lines[0].split(" ")
method = None
path = None
protocol = None
headers = {}
if len(info) > 0:
method = info[0]
if len(info) > 1:
path = info[1]
if len(info) > 2:
protocol = info[2]
for line in lines[1:]:
if line:
parts = line.split(":")
key = None
value = None
if len(parts) > 0:
key = parts[0]
if len(parts) > 1:
value = parts[1]
if not key is None and not value is None:
headers[key.strip().upper()] = value.strip()
return {
"method": method,
"path": path,
"protocol": protocol,
"headers": headers
}
最佳答案
正如 André 在评论中指出的那样,除非作为练习,否则不要掉以轻心地解析 HTTP。在实际程序中,如果可能,您通常应该坚持现有的、成熟的实现。
请注意,除了整体消息结构之外,每个 header 都有其独特的内部结构,您也经常需要对其进行解析; Werkzeug可以help there .
您的代码明显的具体问题是:
- 给定一个 header
Host:www.example.com:80
,它将返回www.example.com
作为它的值; - 给定多个具有相同名称的 header ,它只会返回最后一个的值。
关于python - 我的 Python3 HTTP 头解析代码可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25794696/