http協議是無狀態的,也就是每個請求都是獨立的。那么登錄后的一系列動作,都需要用cookie來驗證身份是否是登錄狀態,為了高效的管理會話,保持會話,於是就有了session
session簡介
session是一種管理用戶狀態和信息的機制,與cookies的不同的是,session的數據是保存在服務器端。說的明白點就是session相當於一個虛擬的瀏覽器,在這個瀏覽器上處於一種保持登錄的狀態。
session登錄
格式:
# session 用法 | Basic Usage:: | | >>> import requests | >>> s = requests.Session() | >>> s.get('https://httpbin.org/get') | <Response [200]> | | Or as a context manager:: | | >>> with requests.Session() as s: | >>> s.get('https://httpbin.org/get') | <Response [200]>
1.舉個例子,模擬百度登錄場景
2.查看登錄后百度賬號的cookies值,經過觀察發現是由”BAIDUID“和"BDUSS"
3.導入requests模塊,使用session()函數
4.攜帶cookies進行請求,通過返回內容,判斷是否登錄成功。
# coding:utf-8 import requests # 保持登錄狀態 s = requests.session() url = 'https://www.baidu.com/' # 請求頭 headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36" } r = s.post(url,headers=headers) # 查看的cookies值 cooks = { "BDUSS":"xxxxxxx", "BAIDUID":"XXXXXXXX" } # 添加登錄所攜帶的cookies c = requests.cookies.RequestsCookieJar() c.set("BDUSS",cooks["BDUSS"]) c.set("BAIDUID",cooks["BAIDUID"]) s.cookies.update(c) # 判斷是否登錄成功 r2 = s.get(url,headers=headers) if '我在誰身旁' in r2.text: print('登錄成功') else: print("登錄失敗")
執行結果:
登錄成功
這個時候就可以做一些登錄過后的操作。
session模擬瀏覽器,瀏覽器中登錄狀態,只要瀏覽器不退出,就可以繼續做其他的操作