Как войти на сайт с phython-запросами?

1

Регистрация сайта бесплатна: http://software.broadinstitute.org/gsea/login.jsp

Я написал этот код для входа на веб-сайт на основе некоторых уроков:

import requests

url = "http://software.broadinstitute.org/gsea/login.jsp"

# Fill in your details here to be posted to the login form.
payload = {
    'j_username': '[email protected]',
    'j_password': 'password'
}

# Use 'with' to ensure the session context is closed after use.
s = request.session()
p = s.post(url, data=payload)
# print the html returned or something more intelligent to see if it a successful login page.
print p, p.url, p.status_code
print 'is redirected: ', p.is_redirect

r = s.get("https://software.broadinstitute.org/gsea/msigdb/download_file.jsp?filePath=/resources/msigdb/6.2/msigdb_v6.2.xml")
# print r.text
print r, r.url, r.status_code
print 'is redirected: ', r.is_redirect

with open("lol.xml", "wb") as handle:
    handle.write(r.content)

Я не уверен, должен ли я заполнять пароль, потому что он скрыт?

Команда post возвращает мне 200 OK, но я все еще не вошел в систему:

<Response [200]> http://software.broadinstitute.org/gsea/login.jsp 200
is redirected:  False
<Response [200]> https://software.broadinstitute.org/gsea/login.jsp 200
is redirected:  False

Хорошо, возможные источники ошибок - это полезная нагрузка с неправильными клавишами словаря.

Код html выглядит следующим образом:

<form id="loginForm" name="loginForm" action="j_spring_security_check" method="POST">
          <table border="0" class="bodyfont" cellpadding="5" cellspacing="5">
            <tbody><tr>
              <td colspan="2" align="left">Items marked with <font color="red">*</font> are required.</td>
            </tr>
            <tr>
              <td colspan="2">&nbsp;</td>
            </tr>
            <tr>
              <td><h3>Email:&nbsp;<font color="red">*</font>&nbsp;</h3></td>
              <td><input id="email" type="text" name="j_username" value="">
              <input id="password" type="hidden" name="j_password" value="password"></td>
            </tr>
            <tr>
          <td>&nbsp;</td>
          <td><input type="button" name="login" value="login" style="margin-top:10px;" onclick="validateForm()"></td>
        </tr>
      </tbody></table>
    </form>

Я что-то пропустил? Почему он не входит в систему?

  • 0
    Вы проверили полезную нагрузку в Chrome с помощью инструментов dev> network. Вы можете просто скопировать его оттуда после входа в систему через браузер.
  • 0
    Используя учетные данные для мусора, я получаю тот же ответ: ваша «проверка успеха» неверна.
Показать ещё 1 комментарий
Теги:
python-requests
post
login

1 ответ

1
Лучший ответ

Как я уже упоминал в своем комментарии, это действительно хороший первый шаг для просмотра журналов на вкладке "Сеть" в Chrome, когда вы хотите войти в систему где-нибудь с запросами. Ваш код не работает, потому что вы просто используете неправильный URL для своего пост-запроса! У вас также есть некоторые опечатки в вашем коде, например: request.session() вместо request.session() requests.session().

import requests


login_url = "http://software.broadinstitute.org/gsea/j_spring_security_check"
url = "http://software.broadinstitute.org/gsea/index.jsp"
payload = {
    'j_username': '[email protected]',
    'j_password': 'password'
}

with requests.Session() as session:
    login = session.post(login_url, data=payload)
    req = session.get(url)

В целом я также сомневаюсь, что просмотр кода состояния ответа - хороший способ выяснить, работает ли логин или нет.

  1. открыть сеанс
  2. отправил почтовый запрос, включая полезную нагрузку (на правый URL)
  3. сделайте запрос получения, чтобы имитировать перенаправление, которое происходит автоматически в браузере (опять-таки вы легко узнаете, используя вкладку chrome network)

Вы можете заменить URL-адрес любым субдоменом, который вы хотите явно...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню