python - 带有网络身份和转发的python登录门户
问题描述
使用 Python 请求,我试图登录一个转发到另一个 URL 的门户 URL。我已经阅读了几篇关于这个主题的帖子,甚至尝试过:
1) 使用请求获取和检索 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)
解决方案
以下是您的代码可能存在的一些问题:
亲身经历;登录页面的 URL 应该与主页的 URL 不同。
中缺少信息
data
,需要在表格中输入所有必需的数据,您可能需要包含其他请求标头
根据该令牌的性质,您获取的代码
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,这也将非常有帮助。
推荐阅读
- laravel - 图像未保存到 laravel 中的数据库中
- javascript - 名称为XXX的控制器未注册-重构使用webpack的旧项目
- batch-file - Windows命令行重命名子文件夹中的文件?
- python - ValueError:尝试规范化数据时,输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值
- django - Django中不存在ipd匹配查询
- c - 为什么 Valgrind 在这个哈希表测试用例中发现错误?
- c - 如果 shell 输出通过管道传输到某处,则 fork() 会导致父主程序的开头执行
- python-3.6 - Sphinx 文档构建在私有 GitHub 存储库的 readthedocs 上失败
- docker - 我在烧瓶 gunicorn 应用程序上遇到了 Nginx 和 docker conf 的问题
- reactjs - 为 webfontloader 定位样式表的路径 - ReactJS