Skip to content

Commit 5854ae1

Browse files
Paul Sokolovskypi-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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy