Hide Forgot
Description of problem: Trying to connect with urllib3's built-in pyopenssl to a dead URL results in an unexpected exception. Version-Release number of selected component (if applicable): python-urllib3-1.10.2-2.el7_1.noarch How reproducible: 100% Steps to Reproduce: 1. Try a simple script to connect to a non-running URL. 2. #!/usr/bin/python import urllib3 from urllib3.contrib import pyopenssl pyopenssl.inject_into_urllib3() http = urllib3.PoolManager() http.request('GET', 'https://localhost/') Actual results: [CTR][root@9a3e220a0a39 site-packages]$ /root/python-test.py Traceback (most recent call last): File "/root/python-test.py", line 8, in <module> http.request('GET', 'https://localhost/') File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 68, in request **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 81, in request_encode_url return self.urlopen(method, url, **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/poolmanager.py", line 161, in urlopen response = conn.urlopen(method, u.request_uri, **kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 545, in urlopen body=body, headers=headers) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 345, in _make_request self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 315, in _raise_timeout if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6 TypeError: __str__ returned non-string (type Error) Expected results: When using non-urllib3-pyopenssl (ie no inject_info_urllib3() call), you get: urllib3.exceptions.SSLError: [Errno 2] No such file or directory Additional info:
This was fixed in upstream by following patch: https://github.com/Lukasa/urllib3/commit/6e7ae92b16ae365ce3b3bacb19dddab457657a9e
Can't reproduce with python-urllib3-1.10.2-2.el7_1.noarch as the error message I get is: Traceback (most recent call last): File "./python-test.py", line 8, in <module> http.request('GET', 'https://localhost/') File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 68, in request **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 81, in request_encode_url return self.urlopen(method, url, **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/poolmanager.py", line 161, in urlopen response = conn.urlopen(method, u.request_uri, **kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen release_conn=release_conn, **response_kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen release_conn=release_conn, **response_kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 617, in urlopen release_conn=release_conn, **response_kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 597, in urlopen _stacktrace=sys.exc_info()[2]) File "/usr/lib/python2.7/site-packages/urllib3/util/retry.py", line 271, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='localhost', port=443): Max retries exceeded with url: / (Caused by ProtocolError('Connection aborted.', error(111, 'Connection refused')))
I'm seeing the expected (fixed) behavior: [CTR][root@f4fb8924a8dc ~]$ rpm -qa | grep urllib python-urllib3-1.10.2-2.el7_1.noarch [CTR][root@f4fb8924a8dc ~]$ python Python 2.7.5 (default, Aug 2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import urllib3 >>> from urllib3.contrib import pyopenssl >>> pyopenssl.inject_into_urllib3() >>> http = urllib3.PoolManager() >>> http.request('GET', 'https://localhost/') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 68, in request **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/request.py", line 81, in request_encode_url return self.urlopen(method, url, **urlopen_kw) File "/usr/lib/python2.7/site-packages/urllib3/poolmanager.py", line 161, in urlopen response = conn.urlopen(method, u.request_uri, **kw) File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 574, in urlopen raise SSLError(e) urllib3.exceptions.SSLError
So the issue is fixed actually? Can the bug be closed?
(In reply to Charalampos Stratakis from comment #9) > So the issue is fixed actually? Can the bug be closed? Yep. The original problem is fixed.