http協議是無狀態的,也就是每一個請求都是獨立的。那麼登陸後的一系列動做,都須要用cookie來驗證身份是不是登陸狀態,爲了高效的管理會話,保持會話,因而就有了session瀏覽器
session是一種管理用戶狀態和信息的機制,與cookies的不一樣的是,session的數據是保存在服務器端。說的明白點就是session至關於一個虛擬的瀏覽器,在這個瀏覽器上處於一種保持登陸的狀態。服務器
格式:cookie
# 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.舉個例子,模擬百度登陸場景session
2.查看登陸後百度帳號的cookies值,通過觀察發現是由」BAIDUID「和"BDUSS"函數
3.導入requests模塊,使用session()函數post
4.攜帶cookies進行請求,經過返回內容,判斷是否登陸成功。url
# 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("登陸失敗")
執行結果:
登陸成功
這個時候就能夠作一些登陸事後的操做。spa
session模擬瀏覽器,瀏覽器中登陸狀態,只要瀏覽器不退出,就能夠繼續作其餘的操做code