我的Python3 HTTP头解析代码正常吗?
我用Python3编写了一个短函数来解析HTTP头。我想知道是否有人能看一下它,并告诉我是否有什么我可以做的不同,使代码更好。我目前所做的工作产生了所需的结果,但我不确定是否有任何情况下该代码不会产生所需的结果 这就是我所拥有的:我的Python3 HTTP头解析代码正常吗?,python,parsing,http,web,python-3.4,Python,Parsing,Http,Web,Python 3.4,我用Python3编写了一个短函数来解析HTTP头。我想知道是否有人能看一下它,并告诉我是否有什么我可以做的不同,使代码更好。我目前所做的工作产生了所需的结果,但我不确定是否有任何情况下该代码不会产生所需的结果 这就是我所拥有的: def _parse_headers(self, headers): lines = headers.split("\r\n") info = lines[0].split(" ") method = None path = None proto
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不能掉以轻心,除非作为一种练习。在实际的程序中,如果可能的话,您通常应该坚持现有的、成熟的实现 请注意,除了整个消息结构之外,每个头都有自己独特的内部结构,您通常也需要对其进行解析;可以 代码中明显的特定问题有:
- 给定一个头
,它将返回Host:www.example.com:80
作为其值李>www.example.com
- 给定具有相同名称的多个头,它将只返回最后一个头的值
:
字符的标题。还有一个问题是只识别\r\n
换行符,虽然\n
换行符不是严格一致的,但您应该明确接受或拒绝它们。我同意其他海报建议使用现有解析库。但是如果你真的想“自己滚”,你可以用这个技巧消除三重if
结构:方法,路径,协议=(info+3*[None])[:3]
。但这是一种恶作剧我已经修正了第一个要点,但对于第二个要点,我将如何解决这个问题?@TechnoCF使用类似的数据结构,因为这是这种消息格式的起源。