Skip to content

Commit 09a11da

Browse files
Preserve HTTP header casing (#216)
1 parent d93b6ff commit 09a11da

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

httpcore/_async/http11.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,17 @@ async def _receive_response(
133133
event = await self._receive_event(timeout)
134134
if isinstance(event, h11.Response):
135135
break
136+
136137
http_version = b"HTTP/" + event.http_version
137-
return http_version, event.status_code, event.reason, event.headers
138+
139+
if hasattr(event.headers, "raw_items"):
140+
# h11 version 0.11+ supports a `raw_items` interface to get the
141+
# raw header casing, rather than the enforced lowercase headers.
142+
headers = event.headers.raw_items()
143+
else:
144+
headers = event.headers
145+
146+
return http_version, event.status_code, event.reason, headers
138147

139148
async def _receive_response_data(
140149
self, timeout: TimeoutDict

httpcore/_sync/http11.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,17 @@ def _receive_response(
133133
event = self._receive_event(timeout)
134134
if isinstance(event, h11.Response):
135135
break
136+
136137
http_version = b"HTTP/" + event.http_version
137-
return http_version, event.status_code, event.reason, event.headers
138+
139+
if hasattr(event.headers, "raw_items"):
140+
# h11 version 0.11+ supports a `raw_items` interface to get the
141+
# raw header casing, rather than the enforced lowercase headers.
142+
headers = event.headers.raw_items()
143+
else:
144+
headers = event.headers
145+
146+
return http_version, event.status_code, event.reason, headers
138147

139148
def _receive_response_data(
140149
self, timeout: TimeoutDict

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def get_packages(package):
5353
packages=get_packages("httpcore"),
5454
include_package_data=True,
5555
zip_safe=False,
56-
install_requires=["h11>=0.8,<0.11", "sniffio==1.*"],
56+
install_requires=["h11==0.*", "sniffio==1.*"],
5757
extras_require={
5858
"http2": ["h2>=3,<5"],
5959
},

0 commit comments

Comments
 (0)