使用Python请求在浏览器中登录外部页面

时间:2014-12-31 10:47:38

标签: python django http session authentication

我有一个django webapp并通过请求模块进行身份验证

import requests

payload = {
    'action': 'login',
    'username': "username",
    'password': "password"
}


r = requests.post('https://example.org/auth', data=payload)
print r.headers
print r.text
print r.cookies

工作正常。但是如何在浏览器中保持会话持久性,即我想打开example.org的另一个标签并已登录?

编辑:我知道 您可以使用以下方法轻松创建持久会话:

 s = requests.session()

问题在于如何使会话在多个请求或浏览器选项卡之间保持不变,即如何在浏览器中存储cookie jar。

1 个答案:

答案 0 :(得分:0)

使用session()

  

会话对象

     

Session对象允许您跨越某些参数   要求。它还会在所有请求中保留cookie   会话实例。

所以你可以这样做:

from requests import session
with session() as s:
    #connexion
    req = s.post('https://example.org/auth', data=payload)
    #get another page
    req = s.get('https://example.org/otherPage.html')

您还可以从一个请求中获取Cookie:

>>> r = requests.get(url)    
>>> r.cookies['example_cookie_name']
'example_cookie_value'
>>> req1Cookies = r.cookies

并使用其他请求发送您想要的Cookie:

要将您自己的cookie发送到服务器,您可以使用cookies参数:

>>> cookies = dict(cookies_are='working') 
>>> r = requests.get(url, cookies=cookies)

>>> r = requests.get(url, cookies=req1Cookies)