带有webidentity和转发的python登录门户

2024-10-03 09:08:50 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python请求,我尝试登录一个门户url,该url将转发到另一个url。我读过几篇关于这个主题的帖子,甚至尝试过:

1)使用请求get和检索csrf令牌创建会话

2)使用上一步中的csrf令牌,在门户URL上发布一篇文章,有效负载为用户名/密码/和csrf令牌(使用开发人员工具时传递的信息相同)

3)在第2步之后,我仍然会得到下面的p.text作为输入用户名和密码,并且不会显示登录后的页面,并表示它正在寻找我登录

s = requests.Session()
g = s.get("myPortalURL")
resp = g.text
for item in resp.split("\n"):
    if "csrf_token" in item:
        print (item)
        csrfToken = item.strip().split("value=")[1].replace("\"", "").replace("/>","")

data = {'Username': self.pythonDataDict["portalUsername"], 'Password': self.pythonDataDict["portalPassword"],
           'csrf_token': csrfToken}

print ("payload= ", data)
headers = {'content-type': 'application/x-www-form-urlencoded'}
p = s.post("myPortalURL", headers=headers, data=data)
soup = BeautifulSoup(p.text)
print (p.text)

Tags: textinurl密码dataget门户item
1条回答
网友
1楼 · 发布于 2024-10-03 09:08:50

以下是您的代码可能存在的一些问题:

  1. 从个人经验来看;登录页面的URL应与主页的URL不同

  2. data中缺少信息,需要在表格中输入所有所需数据,

  3. 您可能需要包括其他请求标题

  4. 获取csrf_token的代码可能会返回不正确的数据,具体取决于该标记的性质(尽管所有标记都不同,因此可能不会返回)

另外,作为旁注,在使用会话时使用with语句通常更为惯用,例如

with requests.Session() as s:
    initial_response = s.get("login_url")
    # def createForm()...
    main_response = s.get("target_url", data = data, headers = headers)
    # rest of code...

如果可能的话,如果您可以包含您试图访问的页面的URL,这也会非常有帮助

相关问题 更多 >