不同系統接口會有不同請求流程機制,常用比如cookies請求流程、session請求流程、token請求流程
1、cookies請求流程
下面例子是cookies請求處理處理,cookies請求處理比較簡單,只需每次在請求頭部帶上cookies值即可
def test_login(): url = 'http://www.renren.com/ajaxLogin/login' params = {'1':'1','uniqueTimestamp':'20201418255'} datas = {'email':'xxxxx@163.com','icode':'','origURL':'http://www.renren.com/home','domain':'renren.com','key_id':'1','captcha_type':'web_login', 'password':'9476d406614f42ecefdaba8e9d525e14a20ea9b188e3a3c0c7741de13ca51e43','rkey':'7773848e037e15b9883721139f3c1ac4'} r = requests.post(url=url,params=params,data=datas) rt = r.text return r.cookies #返回cookies def test_profile(): url = 'http://www.renren.com/273782860/profile' r= requests.get(url=url,cookies=test_login()) #調用時帶上cookies print(r.text)
2、session請求流程
session請求流程處理與cookies類似,session其實就是cookie中存放着一個sessionID,請求時會發送這個ID,客戶端再次發送請求,需要在請求頭里面(cookie)帶上返回的sessionID
處理思路:
1、發送登錄請求
2、登錄成功后,把sessionID的信息返回給客戶端
3、客戶端再次發送請求,需要在請求頭里面(cookie)帶上返回的sessionID
def test_login(): url = 'http://www.renren.com/ajaxLogin/login' params = {'1':'1','uniqueTimestamp':'20201418255'} datas = {'email':'xxxxx@163.com','icode':'','origURL':'http://www.renren.com/home','domain':'renren.com','key_id':'1','captcha_type':'web_login', 'password':'9476d406614f42ecefdaba8e9d525e14a20ea9b188e3a3c0c7741de13ca51e43','rkey':'7773848e037e15b9883721139f3c1ac4'} r = requests.post(url=url,params=params,data=datas) rt = r.text return r.cookies #返回cookies def test_profile(): url = 'http://www.renren.com/273782860/profile' r= requests.get(url=url,cookies=test_login()) #調用時帶上cookies print(r.text)
對cookies、session請求流程處理,還可以使用requests庫中session會話進行處理
import requests import requests def test_login(): url = 'http://www.renren.com/ajaxLogin/login' params = {'1':'1','uniqueTimestamp':'20201418255'} datas = {'email':'xxxxxx,'icode':'','origURL':'http://www.renren.com/home','domain':'renren.com','key_id':'1','captcha_type':'web_login', 'password':'9476d406614f42ecefdaba8e9d525e14a20ea9b188e3a3c0c7741de13ca51e43','rkey':'7773848e037e15b9883721139f3c1ac4'} s = requests.session() #建立session會話 r = s.post(url=url,params=params,data=datas) rt = r.text return s #session def test_profile(): url = 'http://www.renren.com/273782860/profile' r= test_login().get(url=url) print(r.text)
3、token請求流程
token
令牌,是用戶身份的驗證方式。
最簡單的token組成:uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名)。
token請求處理思路:
1)、發送請求登錄
2)、登錄成功后,服務端返回給客戶端的響應數據中,包含了token
3)、客戶端再次發送請求(比如查看各個人主頁),那么就需要在客戶端里面帶上token,在請求中token參數一般有以下2種方式:
a、客戶端的請求參數里面 {"user":3465,"token":"rtyuio45678fdg"}
b、在請求頭里面
def login(): data={"username":"admin","password":"admin"} r=requests.post( url='http://127.0.0.1:5000/login', json=data) return r.json()['access_token'] #返回token def books(): headers={'Authorization':'jwt {0}'.format(login())} #請求頭內包含token r=requests.get( url='http://127.0.0.1:5000/profile', headers=headers) #帶上請求頭 print(r.text)
cookies、session、token之間區別 (以下內容轉載至 https://blog.csdn.net/qq_37939251/article/details/83511451)
token
令牌,是用戶身份的驗證方式。
最簡單的token組成:uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名)。
對Token認證的五點認識
一個Token就是一些信息的集合;
在Token中包含足夠多的信息,以便在后續請求中減少查詢數據庫的幾率;
服務端需要對cookie和HTTP Authrorization Header進行Token信息的檢查;
session
會話,代表服務器與瀏覽器的一次會話過程,這個過程是連續的,也可以時斷時續。
cookie中存放着一個sessionID,請求時會發送這個ID;
session因為請求(request對象)而產生;
session是一個容器,可以存放會話過程中的任何對象;
session的創建與使用總是在服務端,瀏覽器從來都沒有得到過session對象;
session是一種http存儲機制,目的是為武裝的http提供持久機制。
cookie
儲存在用戶本地終端上的數據,服務器生成,發送給瀏覽器,下次請求統一網站給服務器。
cookie與session區別
cookie數據存放在客戶端上,session數據放在服務器上;
cookie不是很安全,且保存數據有限;
session一定時間內保存在服務器上,當訪問增多,占用服務器性能。
session與token
作為身份認證,token安全行比session好;
Session 認證只是簡單的把User 信息存儲到Session 里,因為SID 的不可預測性,暫且認為是安全的。這是一種認證手段。 而Token ,如果指的是OAuth Token 或類似的機制的話,提供的是 認證 和 授權 ,認證是針對用戶,授權是針對App 。其目的是讓 某App有權利訪問 某用戶 的信息。
token與cookie
Cookie是不允許垮域訪問的,但是token是支持的, 前提是傳輸的用戶認證信息通過HTTP頭傳輸;
token就是令牌,比如你授權(登錄)一個程序時,他就是個依據,判斷你是否已經授權該軟件;cookie就是寫在客戶端的一個txt文件,里面包括你登錄信息之類的,這樣你下次在登錄某個網站,就會自動調用cookie自動登錄用戶名;session和cookie差不多,只是session是寫在服務器端的文件,也需要在客戶端寫入cookie文件,但是文件里是你的瀏覽器編號.Session的狀態是存儲在服務器端,客戶端只有session id;而Token的狀態是存儲在客戶端。
參考鏈接:https://blog.csdn.net/qq_37939251/article/details/83511451