Получение файла 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 шт):
Ну просто ждите в бесконечном цикле, пока файл на сервере сформируется:
while True:
response = requests.get(url=url, params=params, headers=headers)
if response.status_code == 202:
create_file(response)
break
Можно ещё time.sleep(сколько-нибудь) в цикл добавить, чтобы не дёргать сервер слишком часто.