Skip to content

Commit

Permalink
Merge pull request #6589 from bruceadams/super_len_str_utf-8
Browse files Browse the repository at this point in the history
Enhance `super_len` to count encoded bytes for str
  • Loading branch information
sigmavirus24 authored Feb 23, 2024
2 parents 3587a5f + 3fd309a commit b8be93a
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/requests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ def super_len(o):
total_length = None
current_position = 0

if isinstance(o, str):
o = o.encode("utf-8")

if hasattr(o, "__len__"):
total_length = len(o)

Expand Down
17 changes: 17 additions & 0 deletions tests/test_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1808,6 +1808,23 @@ def test_autoset_header_values_are_native(self, httpbin):

assert p.headers["Content-Length"] == length

def test_content_length_for_bytes_data(self, httpbin):
data = "This is a string containing multi-byte UTF-8 ☃️"
encoded_data = data.encode("utf-8")
length = str(len(encoded_data))
req = requests.Request("POST", httpbin("post"), data=encoded_data)
p = req.prepare()

assert p.headers["Content-Length"] == length

def test_content_length_for_string_data_counts_bytes(self, httpbin):
data = "This is a string containing multi-byte UTF-8 ☃️"
length = str(len(data.encode("utf-8")))
req = requests.Request("POST", httpbin("post"), data=data)
p = req.prepare()

assert p.headers["Content-Length"] == length

def test_nonhttp_schemes_dont_check_URLs(self):
test_urls = (
"data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==",
Expand Down

0 comments on commit b8be93a

Please sign in to comment.