python запросов: как пройти аутентификацию с помощью сообщения и доступа к файлу через прокси - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь загрузить исследовательскую статью в формате PDF через университетский прокси-сервер, в который мне нужно войти. Я попытался следовать [этому ответу] [1], но полученная загрузка содержит только веб-сайт для входа.

Я пытаюсь сделать это с python запросами следующим образом:

user_name = 'myname'
passwd = 'mypassword'

with requests.Session() as session:

    session.headers.update({'User-Agent': 'Mozilla/5.0'})

    # Parse the input form for the hidden input
    r2      = requests.get(long_proxy)
    soup    = bs4.BeautifulSoup(r2.text, "html.parser")
    form    = soup.find('form')
    hidden  = form.find('input', attrs={'type':'hidden', 'name':'ezproxycsrftoken'}).attrs['value']
    url_res = form.find('input', attrs={'type':'hidden', 'name':'url'}).attrs['value']

    # set up the login

    payload = {
        'user': user_name,
        'pass': passwd,
        'ezproxycsrftoken': hidden,
        'url': url_res
    }

    # post login

    post = session.post(login, data=payload)

    # get data

    r3 = session.get(short_proxy)
    with open('file.pdf', 'wb') as fid:
        fid.write(r3.content)
  • Однако загруженный файл на самом деле не является PDF, а оказывается html кодом страницы входа в систему.

Есть идеи, как получить PDF?

  [1]: https://stackoverflow.com/questions/37816565/python-authentication-with-requests-library-via-post

1 Ответ

1 голос
/ 11 февраля 2020

Вы используете requests.Session() для сохранения файлов cookie / сеанса, которые предоставляет вам веб-сайт, однако вы используете requests.get() вместо session.get() для первоначального запроса, когда вы получаете longproxy. Изменение

r2      = requests.get(long_proxy)

на

r2      = session.get(long_proxy)

Должно решить вашу проблему. Однако я не могу проверить это.

Также обратите внимание, что ваш long_proxy

https://login.emedien.ub.uni-muenchen.de/login?qurl=https://iopscience.iop.org/article/10.3847/2041-8213/aaf743/

- это просто URL-адрес для входа, за которым следует pdf-URL. Так что вам не нужно его извлекать.
Это может сэкономить вам дополнительные запросы / время выполнения

...