Fix proxy support. Fixes #610

This commit is contained in:
Matt Martz 2019-07-05 13:47:54 -05:00
parent 7ebb9965dd
commit 266e53c256
1 changed files with 28 additions and 4 deletions

View File

@ -413,6 +413,8 @@ class SpeedtestHTTPConnection(HTTPConnection):
source_address = kwargs.pop('source_address', None) source_address = kwargs.pop('source_address', None)
timeout = kwargs.pop('timeout', 10) timeout = kwargs.pop('timeout', 10)
self._tunnel_host = None
HTTPConnection.__init__(self, *args, **kwargs) HTTPConnection.__init__(self, *args, **kwargs)
self.source_address = source_address self.source_address = source_address
@ -433,17 +435,23 @@ class SpeedtestHTTPConnection(HTTPConnection):
self.source_address self.source_address
) )
if self._tunnel_host:
self._tunnel()
if HTTPSConnection: if HTTPSConnection:
class SpeedtestHTTPSConnection(HTTPSConnection, class SpeedtestHTTPSConnection(HTTPSConnection):
SpeedtestHTTPConnection):
"""Custom HTTPSConnection to support source_address across """Custom HTTPSConnection to support source_address across
Python 2.4 - Python 3 Python 2.4 - Python 3
""" """
default_port = 443
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
source_address = kwargs.pop('source_address', None) source_address = kwargs.pop('source_address', None)
timeout = kwargs.pop('timeout', 10) timeout = kwargs.pop('timeout', 10)
self._tunnel_host = None
HTTPSConnection.__init__(self, *args, **kwargs) HTTPSConnection.__init__(self, *args, **kwargs)
self.timeout = timeout self.timeout = timeout
@ -451,13 +459,29 @@ if HTTPSConnection:
def connect(self): def connect(self):
"Connect to a host on a given (SSL) port." "Connect to a host on a given (SSL) port."
try:
self.sock = socket.create_connection(
(self.host, self.port),
self.timeout,
self.source_address
)
except (AttributeError, TypeError):
self.sock = create_connection(
(self.host, self.port),
self.timeout,
self.source_address
)
SpeedtestHTTPConnection.connect(self) if self._tunnel_host:
self._tunnel()
if ssl: if ssl:
try: try:
kwargs = {} kwargs = {}
if hasattr(ssl, 'SSLContext'): if hasattr(ssl, 'SSLContext'):
if self._tunnel_host:
kwargs['server_hostname'] = self._tunnel_host
else:
kwargs['server_hostname'] = self.host kwargs['server_hostname'] = self.host
self.sock = self._context.wrap_socket(self.sock, **kwargs) self.sock = self._context.wrap_socket(self.sock, **kwargs)
except AttributeError: except AttributeError: