Search code examples
pythongoogle-app-enginesniurllib3

urllib3 on python 2.7 SNI error on Google App Engine


I'm trying to download an HTTPS page from my site hosted on Google App Engine with SNI. No matter what library I use, I get the following error:

[Errno 8] _ssl.c:504: EOF occurred in violation of protocol

I've tried solving the error in many ways, including using the urllib3 openssl monkeypatch:

from urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3

But I always get the same error mentioned above.

Any ideas?


Solution

  • Unfortunately for urllib3, the Python standard library did not add SNI support until Python 3.2. (See Issue #118 @ urllib3)

    To use SNI in Python 2.7 with urllib3, you'll need to use the PyOpenSSL injection monkeypatch. (See Issue #156 @ urllib3)

    from urllib3.contrib import pyopenssl
    pyopenssl.inject_into_urllib3()
    

    Your question basically had the same code, except it was missing the parentheses call on the pyopenssl.inject_into_urllib3() call. Fixing that should do the trick.

    You'll also need to make sure to have the following dependencies available:

    • pyOpenSSL (tested with 0.13)
    • ndg-httpsclient (tested with 0.3.2)
    • pyasn1 (tested with 0.1.6)