Получение файла GET запросом в python

Сервер по GET запросу формирует csv в теле ответа на запрос, которую нужно сохранить в файл. При первом обращении, когда запрос сформирован верно, сервер отправляет код 200, после чего начинается формирование тела запроса. При последующем отправке запроса с одинаковым содержанием параметров возможны два варианта:

  • файл еще формируется, код 200 и текстовое содержимое в виде процентов сформированной части ответа
  • файл сформирован, код 202 и полный csv. Задача - сохранить csv в файл. Реализовал следущий скрипт на питоне.
import requests


def create_file(response):
    with open('file', 'w') as f:
        f.write(response.text)


def create():

    url = '....csv'

    headers = {
        'Authorization': f'OAuth {token}',
        'content-disposition': 'attachment',
        'content-encoding': 'gzip',
        'content-type': 'text/csv'

    }
    params = {...
    }
    response = requests.get(url=url, params=params, headers=headers)
    if response.status_code == 202:
        create_file(response)


if name == '__main__':
    create()

Такой код отрабатывает, проблема в том, что этот скрипт нужно запускать до тех пор, пока ответ response.status_code будет равен 202. Полагаю, что можно завернуть логику в бесконечный генератор и запускать его в цикле до тех пор, пока не придет нужный ответ. Думаю, что более изысканным будет решение с потоками. Как можно решить такую задачу?


Ответы (1 шт):

Автор решения: CrazyElf

Ну просто ждите в бесконечном цикле, пока файл на сервере сформируется:

while True:
    response = requests.get(url=url, params=params, headers=headers)
    if response.status_code == 202:
        create_file(response)
        break

Можно ещё time.sleep(сколько-нибудь) в цикл добавить, чтобы не дёргать сервер слишком часто.

→ Ссылка