Чтобы загрузить файл с незащищенного URL-адреса, сделайте что-то вроде:
import requests
url = 'http://somewebsite.org'
user, password = 'bob', 'I love cats'
resp = requests.get(url, auth=(user, password))
with open("result.zip", "wb") as fout:
fout.write(resp.content)
Если вы, конечно, должны проверить, получили ли вы правильный ответ, прежде чем писать ZIP-файл.
Для значительного количества веб-сайтов с логином будет работать следующий рецепт: Однако, если asite.com использует слишком много JavaScript, это может не обязательно работать.
Используйте сеанс запросов для хранения любогосессионные куки и выполните следующие три шага.
- ПОЛУЧИТЕ URL для входа. Это приведет к получению возможных файлов cookie сеанса или файлов cookie защиты CSRF
- POST к URL-адресу входа с именем пользователя и паролем. название форм для публикации зависит от страницы. Используйте свой веб-браузер в режиме отладки, чтобы узнать о правильных значениях, которые нужно опубликовать, это может быть больше параметров, чем имя пользователя и пароль
- Элемент списка
- ПОЛУЧИТЬ URL документа и сохранить результатв файл.
Например, в Firefox вы заходите на веб-сайт, на который хотите войти, нажимаете F12 (для режима отладки), нажимаете вкладку сети и затем перезагружаетесь. Вы можете
Заполнить форму входа в систему и отправить запрос POST на панель отладки.
Общий код Python будет выглядеть следующим образом. запросы на импорт
def login_and_download():
ses = requests.session()
# Step 1 get the login page
rslt = ses.get("https://www.asite.com/login-home")
# now any potentially required cookie will be set
if rslt.status_code != 200:
print("failed getting login page")
return False
# for simple pages you can procedd to login
# for a little more complicated pages you might have to parse the
# HTML
# for really annoying pages that use loads of javascript it might be
# even more complicated
# Step 2 perform a post request to login
login_post_url = # This depends on the site you want to connect to. you have analyze the login
# procedure
rslt = ses.post(login_post_url)
if rslt.status_code != 200:
print("failed logging in")
return False
# Step 3 download the url, that you want to get.
rslt = ses.get(url_of_your_document)
if rslt.status_code != 200:
print("failed fetching the file")
return False
with open("result.zip", "wb") as fout:
fout.write(resp.content)