Reputation: 1411
I'm using python-request on Google App Engine and it's not working as expected for HTTPS. Let's see an example:
import requests
requests.get('https://www.digitalocean.com')
That line works perfectly if I execute it in a terminal. Response is 200 OK (without redirects).
However, if I execute it on GAE a TooManyRedirects error is raised. Trying to figure out what's the problem I execute with allow_redirects=False and I can see that the response is a redirect (301) which points to the same url!!! ('location' header value is 'https://www.digitalocean.com'). This obviously (when allow_redirect=True) happens over and over again until the TooManyRedirects error is raised.
So it seems that python-requests is not working on GAE for HTTPS (I've tested with several URL). However HTTP works perfectly.
Any idea about what's happening?
Thanks in advance.
Upvotes: 17
Views: 5002
Reputation: 19104
There is now a better solution than changing your requests
version. As suggested in the official docs you can monkey patch requests
to play nicely with Google App Engine.
First install requests-toolbelt:
pip install -t lib requests-toolbelt
Then in your main.py
file (or equivalent):
import requests_toolbelt.adapters.appengine
requests_toolbelt.adapters.appengine.monkeypatch()
Upvotes: 5
Reputation: 6039
Downgrading to requests==2.1.0 worked for me.
Having an up-to-date urllib3 is important for resolving an unrelated bug (import pwd
, as I recall).
Hopefully App Engine fixes this soon, as requests won't.
EDIT:
I think you can also patch this in the latest requests by commenting lines 161-175 in sessions.py. Untested.
Upvotes: 17