首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用phython请求登录网站?

如何使用phython请求登录网站?
EN

Stack Overflow用户
提问于 2018-07-26 20:18:51
回答 1查看 104关注 0票数 2

网站注册免费:http://software.broadinstitute.org/gsea/login.jsp

我编写这段代码是为了在一些教程的基础上登录网站:

代码语言:javascript
复制
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': 'xxx@gmail.com',
    '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's 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,但我仍未登录:

代码语言:javascript
复制
<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代码如下所示:

代码语言:javascript
复制
<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>

我错过了什么吗?为什么它没有登录?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 07:47:00

正如我在评论中提到的,当您想要在某个地方使用请求登录时,查看Chrome的Network中的日志是非常好的第一步。您的代码不工作,因为您只是使用错误的url为您的后请求!您还在代码中输入了一些,例如:request.session()而不是requests.session()

代码语言:javascript
复制
import requests


login_url = "http://software.broadinstitute.org/gsea/j_spring_security_check"
url = "http://software.broadinstitute.org/gsea/index.jsp"
payload = {
    'j_username': 'a4702585@nwytg.net',
    'j_password': 'password'
}

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

一般来说,我也怀疑查看响应状态代码是否是判断登录是否有效的好方法。

  1. 打开会话
  2. 发送post请求,包括有效负载(向右url)
  3. 发出一个get请求,以模拟在浏览器中自动发生的重定向(同样,您可以通过使用chrome选项卡轻松学习)

你可以用你想要的任何子域替换网址.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51546898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档