Gunzipping Содержание URL - Python
Я вернулся.:) Снова пытаемся получить сжатое содержимое URL-адреса и распаковать его. На этот раз в Python. Раздел кода #SERVER - это скрипт, который я использую для создания сжатых данных. Данные известны как хорошие, так как они работают с Java. Раздел кода #CLIENT - это фрагмент кода, который я использую на стороне клиента, чтобы попытаться прочитать эти данные (для возможного анализа JSON). Однако где-то в этой передаче модуль gzip забывает, как читать данные, которые он создал.
#SERVER
outbuf = StringIO.StringIO()
outfile = gzip.GzipFile(fileobj = outbuf, mode = 'wb')
outfile.write(data)
outfile.close()
print "Content-Encoding: gzip\n"
print outbuf.getvalue()
#CLIENT
urlReq = urllib2.Request(url)
urlReq.add_header('Accept-Encoding', '*')
urlConn = urllib2.build_opener().open(urlReq)
urlConnObj = StringIO.StringIO(urlConn.read())
gzin = gzip.GzipFile(fileobj = urlConnObj)
return gzin.read() #IOError: Not a gzipped file.
Другие заметки:
outbuf.getvalue()
такой же как urlConnObj.getvalue()
такой же как urlConn.read()
1 ответ
Этот вопрос Stackru, казалось, помог мне.
Очевидно, было бы разумно полностью обойти модуль gzip, выбрав вместо него zlib. Также может помочь изменение "*" на "gzip" в заголовке "Accept-Encoding".
#CLIENT
urlReq = urllib2.Request(url)
urlReq.add_header('Accept-Encoding', 'gzip')
urlConn = urllib2.urlopen(urlReq)
return zlib.decompress(urlConn.read(), 16+zlib.MAX_WBITS)