Python使用会话请求模块登录

时间:2016-02-01 23:41:15

标签: python-requests

我有一个内部网应用程序,我可以使用用户名/密码登录。

我试图使用传递我的用户名/密码的python请求访问同一个应用程序,但这不起作用。获得应用程序支持是一项艰巨的任务。

与此同时,我想看看我是否可以使用我在其他浏览器中创建的Web应用程序的会话登录。

如何使用请求模块传递会话。

1 个答案:

答案 0 :(得分:2)

您可能需要在用户名和密码之间发送数据(通常这些数据由服务器随机生成,并且在<input type="hidden">表单元素内),这会阻止CSRF(跨站点请求伪造)攻击。您可能还需要发送Web服务器发送给您的cookie。

因此,要解决您的问题,您需要:

  1. 创建处理Cookie的请求会话;
  2. 请求登录页面(表单所在的位置)并提取CSRF数据;
  3. 将您的凭据中的CSRF数据发布到表单action网址。
  4. 代码将是这样的:

    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和熟悉方法)。