From 84d99f01f55504fb86455551bb4cefec56a7be97 Mon Sep 17 00:00:00 2001 From: Nate Prewitt Date: Tue, 15 Nov 2016 11:27:29 -0700 Subject: [PATCH] add enforce_content_length=True default --- requests/adapters.py | 7 +++++-- requests/models.py | 8 ++++++-- requests/sessions.py | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/requests/adapters.py b/requests/adapters.py index 80fa6f6f..057dd802 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -434,7 +434,8 @@ class HTTPAdapter(BaseAdapter): preload_content=False, decode_content=False, retries=self.max_retries, - timeout=timeout + timeout=timeout, + enforce_content_length=True ) # Send the request. @@ -478,7 +479,9 @@ class HTTPAdapter(BaseAdapter): pool=conn, connection=low_conn, preload_content=False, - decode_content=False + decode_content=False, + enforce_content_length=True, + request_method=request.method ) except: # If we hit any problems here, clean up the connection. diff --git a/requests/models.py b/requests/models.py index 654262c8..f0cbc680 100644 --- a/requests/models.py +++ b/requests/models.py @@ -28,7 +28,8 @@ from .packages.urllib3.fields import RequestField from .packages.urllib3.filepost import encode_multipart_formdata from .packages.urllib3.util import parse_url from .packages.urllib3.exceptions import ( - DecodeError, ReadTimeoutError, ProtocolError, LocationParseError) + DecodeError, ReadTimeoutError, ProtocolError, + LocationParseError, ConnectionError) from .exceptions import ( HTTPError, MissingScheme, InvalidURL, ChunkedEncodingError, ContentDecodingError, ConnectionError, StreamConsumedError) @@ -701,7 +702,10 @@ class Response(object): for chunk in self.raw.stream(chunk_size, decode_content=True): yield chunk except ProtocolError as e: - raise ChunkedEncodingError(e) + if self.headers.get('Transfer-Encoding') == 'chunked': + raise ChunkedEncodingError(e) + else: + raise ConnectionError(e) except DecodeError as e: raise ContentDecodingError(e) except ReadTimeoutError as e: diff --git a/requests/sessions.py b/requests/sessions.py index 792c483e..f6d39827 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -21,7 +21,7 @@ from ._internal_utils import to_native_string from .utils import to_key_val_list, default_headers from .exceptions import ( TooManyRedirects, InvalidScheme, ChunkedEncodingError, - ContentDecodingError, InvalidHeader) + ConnectionError, ContentDecodingError, InvalidHeader) from .packages.urllib3._collections import RecentlyUsedContainer from .structures import CaseInsensitiveDict @@ -115,7 +115,7 @@ class SessionRedirectMixin(object): try: response.content # Consume socket so it can be released - except (ChunkedEncodingError, ContentDecodingError, RuntimeError): + except (ChunkedEncodingError, ConnectionError, ContentDecodingError, RuntimeError): response.raw.read(decode_content=False) # Don't exceed configured Session.max_redirects.