From ed642cfb6d471f2462953ac5f4f33a443750bd02 Mon Sep 17 00:00:00 2001 From: John Szakmeister Date: Sun, 2 Dec 2012 11:25:18 -0500 Subject: [PATCH] Add the ability to turn off HTTP 0.9 support. While debugging an issue I discovered requests was coming back with 200 response, when it really shouldn't have. It turns out this happened for two reasons: the jetty server running the app was rather lame and didn't fail the request as a Bad Request, and httplib was happy to let malformed data through and call it success. It turns out httplib's strict flag controls this behavior of whether or not to validate the status line. The underlying urllib3 supports the concept as well. There was a bug there to that is now fixed upstream. The last step is exposing this through requests. This introduces a supports_http0.9 flag to help control this behavior. It defaults to to True to preserve the current behavior. Setting it to False will allow the underlying HTTPConnection to validate the status line. --- requests/api.py | 2 +- requests/defaults.py | 1 + requests/sessions.py | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/requests/api.py b/requests/api.py index ded79352..ce8495c6 100644 --- a/requests/api.py +++ b/requests/api.py @@ -44,7 +44,7 @@ def request(method, url, **kwargs): adhoc_session = False session = kwargs.pop('session', None) if session is None: - session = sessions.session() + session = sessions.session(config=kwargs.get('config', None)) adhoc_session = True try: diff --git a/requests/defaults.py b/requests/defaults.py index 91d038bc..6f18875e 100644 --- a/requests/defaults.py +++ b/requests/defaults.py @@ -48,3 +48,4 @@ defaults['keep_alive'] = True defaults['encode_uri'] = True defaults['trust_env'] = True defaults['store_cookies'] = True +defaults['support_http0.9'] = True diff --git a/requests/sessions.py b/requests/sessions.py index f0d4f3c7..5887f74b 100644 --- a/requests/sessions.py +++ b/requests/sessions.py @@ -98,7 +98,8 @@ class Session(object): def init_poolmanager(self): self.poolmanager = PoolManager( num_pools=self.config.get('pool_connections'), - maxsize=self.config.get('pool_maxsize') + maxsize=self.config.get('pool_maxsize'), + strict=not self.config.get('support_http0.9') ) def __repr__(self):