Загрузка файла аутентифицированных приложений Django с основного сервера Linux в Python - PullRequest
0 голосов
/ 21 июня 2019

Вопрос в том, чтобы автоматизировать загрузку данных с аутентифицированного сайта Django с главного сервера Linux. Иметь возможность сделать это с помощью скрипта Python будет здорово.

История вопроса

Веб-сайт Challenge Data - это сайт, предлагающий задачи в области наук о данных. Этот сайт написан на Джанго.

Запрос данных 18-Owkin запрос данных предоставляет данные довольно большого размера (более 10 Гб). Вам необходимо пройти проверку подлинности, чтобы загрузить данные.

Я могу загрузить файлы с моего ноутбука Windows 10 после аутентификации на веб-сайте и перехода по ссылке для скачивания, например y_train . В этом случае загрузка начинается автоматически.

Однако я хочу загрузить данные на компьютер с графическим процессором Cloud Linux Core (без графического интерфейса). Я могу сделать это с моего ноутбука, но он очень медленный, так как у меня низкая пропускная способность.

Видите ли вы способ получить данные непосредственно с главного сервера Linux? Это будет означать:

  • Аутентифицироваться на сайте (Django).
  • Затем подключитесь к «URL загрузки». Будет ли выполняться загрузка?

1 Ответ

1 голос
/ 22 июня 2019

С помощью BoboDarph я пришел к следующему работающему скрипту Python:

# python script:
import requests
from getpass import getpass
from os import stat

# constants
url_login = 'https://challengedata.ens.fr/login/'
url_logout = 'https://challengedata.ens.fr/userlogout'

username = input("Challenge data Username: ")
password = getpass("Challenge data Password: ")

client = requests.session()
login_text = client.get(url_login)

csrftoken = client.cookies['csrftoken']

login_data = ({'username': username, 'password': password, 'csrfmiddlewaretoken': csrftoken,
               'next': 'https://challengedata.ens.fr/participants/challenges/18/download/y-train'})
r = client.post(url_login, data=login_data)

csrftoken = client.cookies['csrftoken']

file_save = 'training_output.csv'

with open(file_save, 'wb') as fd:
    for chunk in r.iter_content(chunk_size=1045504):
        fd.write(chunk)

print("File '{0}' saved, {1} bytes".format(file_save, stat(file_save)[6]))

r = client.post(url_logout, data={'csrfmiddlewaretoken': csrftoken})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...