requests: https:// does not work with Python 3.6
When requesting a https:// url, request method falls into an infinite recursion.
The issue is this method in python/ssl.py.
@options.setter
def options(self, value):
super(SSLContext, SSLContext).options.__set__(self, value)
The commit which introduced this line to python is this https://hg.python.org/cpython/rev/c32e9f9b00f7.
The actual error looks like this:
File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 501, in get
return self.request('GET', url, **kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 423, in send
timeout=timeout
File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
chunked=chunked)
File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
conn.connect()
File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/connection.py", line 311, in connect
cert_reqs=resolve_cert_reqs(self.cert_reqs),
File "/usr/local/lib/python3.6/site-packages/requests/packages/urllib3/util/ssl_.py", line 264, in create_urllib3_context
context.options |= options
File "/usr/local/lib/python3.6/ssl.py", line 459, in options
super(SSLContext, SSLContext).options.__set__(self, value)
File "/usr/local/lib/python3.6/ssl.py", line 459, in options
super(SSLContext, SSLContext).options.__set__(self, value)
File "/usr/local/lib/python3.6/ssl.py", line 459, in options
super(SSLContext, SSLContext).options.__set__(self, value)
[Previous line repeated 316 more times]
RecursionError: maximum recursion depth exceeded while calling a Python object
Tested using python 3.6.0b4.
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Comments: 16 (9 by maintainers)
Commits related to this issue
- Workaround async requests bug on py36 But in questions is https://github.com/requests/requests/issues/3752 Workaround includes two new entry points, talisker.gunicorn.gevent and talisker.gunicorn.eve... — committed to canonical-ols/talisker by bloodearnest 7 years ago
- Workaround async requests bug on py36 But in questions is https://github.com/requests/requests/issues/3752 Workaround includes two new entry points, talisker.gunicorn.gevent and talisker.gunicorn.eve... — committed to canonical-ols/talisker by bloodearnest 7 years ago
- Workaround async requests bug on py36 But in questions is https://github.com/requests/requests/issues/3752 Workaround includes two new entry points, talisker.gunicorn.gevent and talisker.gunicorn.eve... — committed to canonical-ols/talisker by bloodearnest 7 years ago
- Workarounds for py36/async/requests bug (#99) * Workaround async requests bug on py36 But in questions is https://github.com/requests/requests/issues/3752 Workaround includes two new entry points... — committed to canonical-ols/talisker by bloodearnest 6 years ago
Requests has some problems with gevent and monkey patching because it performs feature detection on the select module at import time. A future release will bring it up to date with a newer urllib3 that contains fixes for this problem, but in the meantime gevent’s monkey patch should be applied before importing requests.
@AeroNotix please don’t use this issue or this project’s tracker to discuss gevent problems.
@pirata This issue still exists with
python 3.6.1,gevent 1.2.1,requests 2.13.0. Steps to reproduce:If I import
requestsafter the patch, everything works. It used to be the case that it won’t matter and I’m wondering if something can be changed to keep the old behavior. What do you think @Lukasa ?After further debugging, I was able to reproduce it as a
geventissue (which was the context I was using this in).I’m guessing I’m going to have to take it to gevent folks to have a look? Thanks for looking into this, everyone.
@pirate can you unlock that ticket, then? I’m still having the same issue on python 3.6 with upgraded versions of everything.
Here’s the reference to the gevent ticket for the same issue: https://github.com/gevent/gevent/issues/903 Gevent has now been bumped to >1.2 by default. If you’re still having this issue, it can be fixed with a simple
pip install --upgrade gevent.