Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions httpx/_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -581,7 +581,8 @@ def encoding(self) -> str:
for key, value in self.raw:
try:
key.decode(encoding)
value.decode(encoding)
if value is not None:
value.decode(encoding)
except UnicodeDecodeError:
break
else:
Expand Down Expand Up @@ -681,7 +682,12 @@ def get_list(self, key: str, split_commas: bool = False) -> typing.List[str]:
def update(self, headers: HeaderTypes = None) -> None: # type: ignore
headers = Headers(headers)
for key, value in headers.raw:
self[key.decode(headers.encoding)] = value.decode(headers.encoding)
dk = key.decode(headers.encoding)
if value is not None:
self[dk] = value.decode(headers.encoding)
else:
if dk in self:
del self[dk]

def copy(self) -> "Headers":
return Headers(self, encoding=self.encoding)
Expand Down
15 changes: 13 additions & 2 deletions httpx/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,20 @@ def normalize_header_value(
"""
Coerce str/bytes into a strictly byte-wise HTTP header value.
"""
if isinstance(value, bytes):
if isinstance(
value,
(
bytes,
bytearray,
memoryview,
),
):
return value
if value is None:
return value
return value.encode(encoding or "ascii")
if isinstance(value, str):
return value.encode(encoding or "ascii")
raise NotImplementedError


def str_query_param(value: "PrimitiveData") -> str:
Expand Down