gpt4 book ai didi

python - 如何使用Python请求登录网站?

转载 作者:行者123 更新时间:2023-12-01 09:12:24 25 4
gpt4 key购买 nike

网站免费注册: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': '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,但我仍然没有登录:

<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>

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

最佳答案

正如我在评论中提到的,当您想通过请求登录某个地方时,查看 Chrome 网络选项卡中的日志是非常好的第一步。您的代码不起作用,因为您只是在发布请求中使用了错误的网址!您的代码中还存在一些拼写错误,例如: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': 'a4702585@nwytg.net',
'j_password': 'password'
}

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

总的来说,我也怀疑查看响应状态代码是否是确定登录是否有效的好方法。

  1. 打开 session
  2. 发送了包含负载的 POST 请求(到正确的网址)
  3. 发出 get 请求来模拟浏览器中自动发生的重定向(这也是您可以通过使用 Chrome 网络选项卡轻松学习的内容)

您显然可以将网址替换为您想要的任何子域...

关于python - 如何使用Python请求登录网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com