Длина содержимого HTTP-ответа w gzip

Я делаю запрос на получение, используя библиотеку запросов Python, и передаю содержимое в файл. Я хотел бы добавить индикатор выполнения, установив максимальное значение индикатора выполнения в resp.headers ['content-length'] и перебирая ответ, используя chunksize = 1 byte (response.iter_content (chunk_size = 1)). Однако кодировка содержимого ответа - gzip, поэтому длина содержимого относится к сжатому размеру.

используя следующий код:

resp = requests.get(...., stream=True)
count = 0
for x in resp.iter_content(chunk_size=1):
  count += 1

я получаю: count = 64 и соответственноheaders ['content-length'] = 127.

Что мне следует использовать в качестве максимального значения индикатора выполнения?


person Jeff Tsui    schedule 27.02.2015    source источник


Ответы (1)


Я бы использовал клинт Кеннета и сделал бы это вот так. Или что вам следует сделать, так это настроить реализацию индикатора выполнения на обновление, начиная с 127.

from clint.textui import progress
import requests


resp = requests.get(url, stream=True)
total_length = int(resp.headers.get('content-length'))

for chunk in progress.bar(resp.iter_content(chunk_size=1), expected_size=(total_length / 1) + 1):
    pass
person Anton Antonov    schedule 27.02.2015
comment
Это не решает мою проблему, когда resp.headers.get ('content-length') = 127, что не равно количеству итераций (count = 64). Библиотека индикатора выполнения и реализация не имеют значения - person Jeff Tsui; 27.02.2015
comment
По внутренним запросам он автоматически декодирует gzip. Ложное значение content_length при повторении содержимого трудно отладить. - person Anton Antonov; 27.02.2015