Недавно захотел написать программу для изучения библиотеки для Python — requests. Мой выбор пал на написание программы для скачивания файлов.
Поскольку мы будем использовать библиотеку requests, импортируем её (+shutil):
import requests, shutil
Код «меню» (это заключено в while True для возможности выхода break'ом и работы программы много раз без перезапуска):
menu = input("Ready.n")
if menu == "get": #режим загрузки
#...
if menu == "about": #о программе
#...
if menu == "exit": #выход
#...
В get'е спрашиваем путь к файлу: (причём отдельно директорию и имя файла, зачем это нужно — скажу позже):
dirfile = input("Enter path to the directory with file(no "www." !):")
file = input("Enter the name of the file:")
А для requests ведь нужен полный путь! Не беда, склеим dirfile и file:
fullpath = dirfile + file
Иногда, чтобы скачать файл, нужно войти. Это нужно реализовать!
Спросим пользователя об этом:
reqauthstr = input("Do you need authentification?[y/n]:")
while True:
if reqauthstr == "y" or reqauthstr == "Y":
reqauth = True
break
elif reqauthstr == "n" or reqauthstr == "N":
reqauth = False
break
else:
print("Incorrect command.")
Если нужно входить, тогда напишем запрос с аутентификацией. Спрашиваем логин и пароль:
if reqauth == True:
user = input("Login:")
passw = input("Password:")
Создаём сам get-запрос:
filereq = requests.get(fullpath,stream = True,auth=(user,passw))
И копируем файл (как раз, разделение пригодилось в open`e):
with open(file,"wb") as receive:
shutil.copyfileobj(filereq.raw,receive)
del filereq
Без аутентификации — практически тоже самое:
elif reqauth == False:
filereq = requests.get(fullpath,stream = True)
with open(file,"wb") as receive:
shutil.copyfileobj(filereq.raw,receive)
del filereq
Ну вот, закачку реализовали.
Остальные пункты меню:
if menu == "exit":
break
if menu == "about":
print("""
nxfetch - v0.1.0
Library: requests - v2.6.0
Author: Fedor Sturovn
""")
else:
print("Incorrect command.n")