diff options
author | Matt Martz <matt@sivel.net> | 2019-07-05 13:47:54 -0500 |
---|---|---|
committer | Matt Martz <matt@sivel.net> | 2019-08-22 09:45:01 -0500 |
commit | 266e53c25636e0dcee31b599c49113d4d7cf8298 (patch) | |
tree | 8edb0b3bd76af111c17144a3ac21e094bf811137 | |
parent | 7ebb9965ddaeb64ecb27efdf06e91d661c129301 (diff) |
Fix proxy support. Fixes #610proxy-fixes
-rwxr-xr-x | speedtest.py | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/speedtest.py b/speedtest.py index b7a5124..eb131ee 100755 --- a/speedtest.py +++ b/speedtest.py @@ -413,6 +413,8 @@ class SpeedtestHTTPConnection(HTTPConnection): source_address = kwargs.pop('source_address', None) timeout = kwargs.pop('timeout', 10) + self._tunnel_host = None + HTTPConnection.__init__(self, *args, **kwargs) self.source_address = source_address @@ -433,17 +435,23 @@ class SpeedtestHTTPConnection(HTTPConnection): self.source_address ) + if self._tunnel_host: + self._tunnel() + if HTTPSConnection: - class SpeedtestHTTPSConnection(HTTPSConnection, - SpeedtestHTTPConnection): + class SpeedtestHTTPSConnection(HTTPSConnection): """Custom HTTPSConnection to support source_address across Python 2.4 - Python 3 """ + default_port = 443 + def __init__(self, *args, **kwargs): source_address = kwargs.pop('source_address', None) timeout = kwargs.pop('timeout', 10) + self._tunnel_host = None + HTTPSConnection.__init__(self, *args, **kwargs) self.timeout = timeout @@ -451,14 +459,30 @@ if HTTPSConnection: def connect(self): "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: try: kwargs = {} if hasattr(ssl, 'SSLContext'): - kwargs['server_hostname'] = self.host + if self._tunnel_host: + kwargs['server_hostname'] = self._tunnel_host + else: + kwargs['server_hostname'] = self.host self.sock = self._context.wrap_socket(self.sock, **kwargs) except AttributeError: self.sock = ssl.wrap_socket(self.sock) |