我有一个内部网应用程序,我可以使用用户名/密码登录。
我试图使用传递我的用户名/密码的python请求访问同一个应用程序,但这不起作用。获得应用程序支持是一项艰巨的任务。
与此同时,我想看看我是否可以使用我在其他浏览器中创建的Web应用程序的会话登录。
如何使用请求模块传递会话。
答案 0 :(得分:2)
您可能需要在用户名和密码之间发送数据(通常这些数据由服务器随机生成,并且在<input type="hidden">
表单元素内),这会阻止CSRF(跨站点请求伪造)攻击。您可能还需要发送Web服务器发送给您的cookie。
因此,要解决您的问题,您需要:
action
网址。 代码将是这样的:
import requests
LOGIN_URL = '...' # put URL here
# replace 'user' and 'pass' with form field names for credentials
CREDENTIALS = {'user': '...', 'pass': '...'}
session = requests.session()
# get cookies and CSRF data
response = session.get(LOGIN_URL)
csrf_data = ... # extract data from response.text in a dict
# post data
csrf_data.update(CREDENTIALS)
# you may change LOGIN_URL below with form's 'action' URL if they differ
response = session.post(LOGIN_URL, data=csrf_data)
# now check response.text to see if you're logged in
有很多方法可以提取CSRF数据,例如:简单的字符串操作,正则表达式或更专业的库,如lxml和BeautifulSoup(它取决于您的输入HTML和熟悉方法)。