-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutilities.py
More file actions
27 lines (24 loc) · 888 Bytes
/
utilities.py
File metadata and controls
27 lines (24 loc) · 888 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def parse_request(request):
"""Parse a P2P-CI style request or response into components.
Accepts CRLF or LF line endings. Returns (method, version, parameters, headers, body_lines).
"""
lines = request.replace("\r\n", "\n").split("\n")
if not lines or not lines[0].strip():
raise ValueError("Empty request line")
request_line = lines[0].split()
if len(request_line) < 2:
raise ValueError("Malformed request line")
method = request_line[0]
version = request_line[-1]
parameters = request_line[1:-1]
headers = {}
body = []
for line in lines[1:]:
if not line.strip():
continue
if ":" in line:
key, value = line.split(":", 1)
headers[key.strip()] = value.strip()
else:
body.append(line.strip())
return method, version, parameters, headers, body