Python Requests requests.exceptions.SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol Python Requests requests.exceptions.SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol python python

Python Requests requests.exceptions.SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol


Reposting this here for others from the requests issue page:

Requests' does not support doing this before version 1. Subsequent to version 1, you are expected to subclass the HTTPAdapter, like so:

from requests.adapters import HTTPAdapterfrom requests.packages.urllib3.poolmanager import PoolManagerimport sslclass MyAdapter(HTTPAdapter):    def init_poolmanager(self, connections, maxsize, block=False):        self.poolmanager = PoolManager(num_pools=connections,                                       maxsize=maxsize,                                       block=block,                                       ssl_version=ssl.PROTOCOL_TLSv1)

When you've done that, you can do this:

import requestss = requests.Session()s.mount('https://', MyAdapter())

Any request through that session object will then use TLSv1.


Setting verify=False only skips verifying the server certificate, but will not help to resolve SSL protocol errors.

This issue is likely due to SSLv2 being disabled on the web server, but Python 2.x tries to establish a connection with PROTOCOL_SSLv23 by default. This happens at https://github.com/python/cpython/blob/360aa60b2a36f5f6e9e20325efd8d472f7559b1e/Lib/ssl.py#L1057

You can monkey-patch ssl.wrap_socket() in the ssl module by overriding the ssl_version keyword parameter. The following code can be used as-is. Put this at the start of your program before making any requests.

import sslfrom functools import wrapsdef sslwrap(func):    @wraps(func)    def bar(*args, **kw):        kw['ssl_version'] = ssl.PROTOCOL_TLSv1        return func(*args, **kw)    return barssl.wrap_socket = sslwrap(ssl.wrap_socket)


Installing the "security" package extras for requests solved for me:

sudo apt-get install libffi-devsudo pip install -U requests[security]