Регистрация сайта бесплатна: 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"> </td>
</tr>
<tr>
<td><h3>Email: <font color="red">*</font> </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> </td>
<td><input type="button" name="login" value="login" style="margin-top:10px;" onclick="validateForm()"></td>
</tr>
</tbody></table>
</form>
Я что-то пропустил? Почему он не входит в систему?
Как я уже упоминал в своем комментарии, это действительно хороший первый шаг для просмотра журналов на вкладке "Сеть" в 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)
В целом я также сомневаюсь, что просмотр кода состояния ответа - хороший способ выяснить, работает ли логин или нет.
Вы можете заменить URL-адрес любым субдоменом, который вы хотите явно...