Curro
Curro

Reputation: 1411

python requests on Google App Engine not working for HTTPS

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

Answers (2)

Alex
Alex

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

rattray
rattray

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

Related Questions