Skip to content

Commit 5854ae1

Browse files
pfalconpi-anl
authored andcommitted
urequests: Add ability to parse response headers.
This is controlled by parse_headers param to request(), which defaults to True for compatibility with upstream requests. In this case, headers are available as .headers of Response objects. They are however normal (not case-insensitive) dict. If parse_headers=False, old behavior of ignore response headers is used, which saves memory on the dict. Finally, parse_headers can be a custom function which can e.g. parse only subset of headers (again, to save memory).
1 parent db4c739 commit 5854ae1

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

python-ecosys/urequests/urequests.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def json(self):
3333
return ujson.loads(self.content)
3434

3535

36-
def request(method, url, data=None, json=None, headers={}, stream=None):
36+
def request(method, url, data=None, json=None, headers={}, stream=None, parse_headers=True):
3737
try:
3838
proto, dummy, host, path = url.split("/", 3)
3939
except ValueError:
@@ -55,6 +55,10 @@ def request(method, url, data=None, json=None, headers={}, stream=None):
5555
ai = usocket.getaddrinfo(host, port, 0, usocket.SOCK_STREAM)
5656
ai = ai[0]
5757

58+
resp_d = None
59+
if parse_headers is not False:
60+
resp_d = {}
61+
5862
s = usocket.socket(ai[0], ai[1], ai[2])
5963
try:
6064
s.connect(ai[-1])
@@ -98,13 +102,23 @@ def request(method, url, data=None, json=None, headers={}, stream=None):
98102
raise ValueError("Unsupported " + l)
99103
elif l.startswith(b"Location:") and not 200 <= status <= 299:
100104
raise NotImplementedError("Redirects not yet supported")
105+
if parse_headers is False:
106+
pass
107+
elif parse_headers is True:
108+
l = str(l, "utf-8")
109+
k, v = l.split(":", 1)
110+
resp_d[k] = v.strip()
111+
else:
112+
parse_headers(l, resp_d)
101113
except OSError:
102114
s.close()
103115
raise
104116

105117
resp = Response(s)
106118
resp.status_code = status
107119
resp.reason = reason
120+
if resp_d is not None:
121+
resp.headers = resp_d
108122
return resp
109123

110124

0 commit comments

Comments
 (0)