From aff490beea4efeec8b6a853ad9ff265f9465497b Mon Sep 17 00:00:00 2001 From: galgolan Date: Mon, 5 Sep 2016 15:24:10 +0300 Subject: [PATCH 1/3] Added gzip support: --- speedtest_cli.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index d93d5c3..be7726b 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -24,6 +24,9 @@ import socket import timeit import platform import threading +import urllib2 +import StringIO +import gzip __version__ = '0.3.4' @@ -375,19 +378,18 @@ def getConfig(): we are interested in """ - request = build_request('://www.speedtest.net/speedtest-config.php') - uh, e = catch_request(request) - if e: - print_('Could not retrieve speedtest.net configuration: %s' % e) - sys.exit(1) + request = build_request('://www.speedtest.net/speedtest-config.php', headers = {'user-agent':user_agent, 'accept-encoding': 'gzip'}) + uh = urllib2.build_opener() + + response = uh.open(request) + + text = gzip.GzipFile(fileobj=StringIO.StringIO(response.read())).read() configxml = [] - while 1: - configxml.append(uh.read(10240)) - if len(configxml[-1]) == 0: - break - if int(uh.code) != 200: + configxml.append(text) + + if(int(response.code) != 200): return None - uh.close() + try: try: root = ET.fromstring(''.encode().join(configxml)) From 76264fd19f594fd8665176633081a9081f1a0b56 Mon Sep 17 00:00:00 2001 From: galgolan Date: Mon, 5 Sep 2016 15:32:21 +0300 Subject: [PATCH 2/3] fixed gzip support --- speedtest_cli.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index be7726b..f1c8ac8 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -383,7 +383,11 @@ def getConfig(): response = uh.open(request) - text = gzip.GzipFile(fileobj=StringIO.StringIO(response.read())).read() + if (response.headers['content-encoding'] == 'gzip'): + text = gzip.GzipFile(fileobj=StringIO.StringIO(response.read())).read() + else: + text = response.read() + configxml = [] configxml.append(text) From ff76b18f87948a3172a29ee33225efe31bf9c001 Mon Sep 17 00:00:00 2001 From: galgolan Date: Thu, 8 Sep 2016 22:09:19 +0300 Subject: [PATCH 3/3] Fixed Gzip in Python 3 --- speedtest_cli.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index f1c8ac8..2d86320 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -24,8 +24,6 @@ import socket import timeit import platform import threading -import urllib2 -import StringIO import gzip __version__ = '0.3.4' @@ -51,8 +49,15 @@ except ImportError: # Begin import game to handle Python 2 and Python 3 try: + from StringIO import StringIO, BytesIO +except ImportError: + from io import StringIO, BytesIO + +try: + import urllib2 as urllib from urllib2 import urlopen, Request, HTTPError, URLError except ImportError: + import urllib.request as urllib from urllib.request import urlopen, Request, HTTPError, URLError try: @@ -379,15 +384,15 @@ def getConfig(): """ request = build_request('://www.speedtest.net/speedtest-config.php', headers = {'user-agent':user_agent, 'accept-encoding': 'gzip'}) - uh = urllib2.build_opener() + uh = urllib.build_opener() response = uh.open(request) if (response.headers['content-encoding'] == 'gzip'): - text = gzip.GzipFile(fileobj=StringIO.StringIO(response.read())).read() + text = gzip.GzipFile(fileobj=BytesIO(response.read())).read() else: text = response.read() - + configxml = [] configxml.append(text)