Gunzipping Содержание URL - Python - PullRequest
0 голосов
/ 19 июля 2011

Я вернулся.:) Снова пытаемся получить сжатое содержимое 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 Ответ

0 голосов
/ 19 июля 2011

Этот вопрос StackOverflow , похоже, помог мне.

Очевидно, было бы разумно полностью обойти модуль 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)
...