HTTP 헤더를 구문 분석하기 위해 Python3에 짧은 함수를 작성했습니다. 누구든지 코드를 살펴보고 다르게 할 수있는 코드가 있다면 코드를 더 잘 만들 수 있는지 궁금합니다. 현재 내가 필요한 결과를 산출하고 있지만이 코드가 원하는 결과를 내지 못하는 상황이 있는지 확실하지 않습니다.파이썬 3 HTTP 헤더가 코드를 파싱 할 수 있습니까?
코멘트에 앙드레에서 언급 한 바와 같이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
}
[이 답변] (http://stackoverflow.com/a/5955949/2629998) 표준 라이브러리의 메서드를 사용하여 헤더를 구문 분석하는 좋은 방법을 제공합니다. 자체 코드를 롤링하는 대신 사용하십시오. –
여기에 몇 가지 문제점이 있습니다. 이것은 여러 줄에 걸쳐있는 헤더를 제대로 처리하지 못하고':'문자가 포함 된 헤더를 제대로 처리하지 못합니다. '\ r \ n' 줄 바꿈만을 인식하는 문제도 있지만,'\ n' 줄 바꿈이 엄격히 일치하지는 않습니다. 명시 적으로 수락하거나 거절해야합니다. –
기존 파싱 라이브러리 사용을 권장하는 다른 포스터에 동의합니다. 그러나 만약 당신이 "자신의 것을 굴리기"를 원한다면,이 해킹으로''if'' 구조를 제거 할 수 있습니다 :'method, path, protocol = (info + 3 * [None]) [: 3]'. 하지만 ** ** 해킹입니다. :) –