Skip to content

Commit

Permalink
Use urllib3 native chunking ability (#6226)
Browse files Browse the repository at this point in the history
* Fix #3844 
* Use urllib for chunked 

---------

Co-authored-by: James Pickering <[email protected]>
Co-authored-by: Leon Verrall <[email protected]>
  • Loading branch information
3 people authored Apr 22, 2023
1 parent 7f694b7 commit 26bea1e
Showing 1 changed file with 13 additions and 58 deletions.
71 changes: 13 additions & 58 deletions requests/adapters.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
from urllib3.exceptions import ReadTimeoutError, ResponseError
from urllib3.exceptions import SSLError as _SSLError
from urllib3.poolmanager import PoolManager, proxy_from_url
from urllib3.response import HTTPResponse
from urllib3.util import Timeout as TimeoutSauce
from urllib3.util import parse_url
from urllib3.util.retry import Retry
Expand Down Expand Up @@ -485,63 +484,19 @@ def send(
timeout = TimeoutSauce(connect=timeout, read=timeout)

try:
if not chunked:
resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
)

# Send the request.
else:
if hasattr(conn, "proxy_pool"):
conn = conn.proxy_pool

low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)

try:
skip_host = "Host" in request.headers
low_conn.putrequest(
request.method,
url,
skip_accept_encoding=True,
skip_host=skip_host,
)

for header, value in request.headers.items():
low_conn.putheader(header, value)

low_conn.endheaders()

for i in request.body:
low_conn.send(hex(len(i))[2:].encode("utf-8"))
low_conn.send(b"\r\n")
low_conn.send(i)
low_conn.send(b"\r\n")
low_conn.send(b"0\r\n\r\n")

# Receive the response from the server
r = low_conn.getresponse()

resp = HTTPResponse.from_httplib(
r,
pool=conn,
connection=low_conn,
preload_content=False,
decode_content=False,
)
except Exception:
# If we hit any problems here, clean up the connection.
# Then, raise so that we can handle the actual exception.
low_conn.close()
raise
resp = conn.urlopen(
method=request.method,
url=url,
body=request.body,
headers=request.headers,
redirect=False,
assert_same_host=False,
preload_content=False,
decode_content=False,
retries=self.max_retries,
timeout=timeout,
chunked=chunked,
)

except (ProtocolError, OSError) as err:
raise ConnectionError(err, request=request)
Expand Down

0 comments on commit 26bea1e

Please sign in to comment.