Попытка загрузить файл через https - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь загрузить zip-файл с веб-сайта, на котором находится ссылка https: //. Я пробовал следующее, но не могу получить какой-либо вывод. Кто-нибудь может подсказать, что я могу делать не так?

URL = www.somewebsite.com

Загрузить zip-файл = www.somewebsite.com/output/revisionId=40687821$$Xiiy75&action_id=

import requests
url = 'http://somewebsite.org'
user, password = 'bob', 'I love cats'
resp = requests.get(url, auth=(user, password))

1 Ответ

0 голосов
/ 09 ноября 2019

Чтобы загрузить файл с незащищенного 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, это может не обязательно работать.

Используйте сеанс запросов для хранения любогосессионные куки и выполните следующие три шага.

  1. ПОЛУЧИТЕ URL для входа. Это приведет к получению возможных файлов cookie сеанса или файлов cookie защиты CSRF
  2. POST к URL-адресу входа с именем пользователя и паролем. название форм для публикации зависит от страницы. Используйте свой веб-браузер в режиме отладки, чтобы узнать о правильных значениях, которые нужно опубликовать, это может быть больше параметров, чем имя пользователя и пароль
  3. Элемент списка
  4. ПОЛУЧИТЬ 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...