Используйте Python Requests для загрузки сжатого tar.gzfile и распакуйте его, используя tar - PullRequest
0 голосов
/ 21 января 2019

Мне нужно использовать запрос вызова для загрузки файла tar gz, я обнаружил, что request.get автоматически распаковывает файл, я пытался использовать решение, указанное здесь , но когда я пытаюсь распаковать его, используя tar говорит, что он не в формате gzip.

Я попробовал следующие подходы:

response = requests.get(url,auth=(user, key),stream=True)
if response.status_code == 200:
    with open(target_path, 'wb') as f:
        f.write(response.raw)

if response.status_code == 200:
    with open(target_path, 'wb') as f:
        f.write(response.raw)

raw = response.raw
with open(target_path, 'wb') as out_file:
    while True:
        chunk = raw.read(1024, decode_content=True)
        if not chunk:
            break
        out_file.write(chunk) 

Все вышеперечисленное при распаковке выдает ошибку:

$ tar -xvzf /tmp/file.tar.gz -C /

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

Примечание: невозможно использовать urllib.open , так как мне нужна аутентификация и т. Д., И я должен использовать библиотеку запросов

1 Ответ

0 голосов
/ 21 января 2019

Вам просто нужно изменить f.write(response.raw) на f.write(response.raw.read())

Попробуйте код ниже, это должно дать вам правильный файл tar gz.

import requests

url = 'https://pypi.python.org/packages/source/x/xlrd/xlrd-0.9.4.tar.gz'
target_path = 'xlrd-0.9.4.tar.gz'

response = requests.get(url, stream=True)
if response.status_code == 200:
    with open(target_path, 'wb') as f:
        f.write(response.raw.read())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...