在上一篇Python介面自動化測驗系列文章:Python介面自動化-requests模塊之post請求,介紹了post原始碼,data、json引數應用場景及實戰,

以下介紹cookie、session原理及在介面自動化中的應用,
HTTP 協議是一種無狀態協議,即每次服務端接收到客戶端的請求時,都是一個全新的請求,服務器并不知道客戶端的歷史請求記錄;Session 和 Cookie 的主要目的就是為了彌補 HTTP 的無狀態特性,
如果我們測驗的介面有依賴關系怎么辦呢(比如購物支付時,需要先登錄),這時我們就要用到cookie和session技術來保持客戶端與服務器端連接的狀態,
一、cookie
1、cookie介紹
cookie是服務器發送到用戶瀏覽器并保存在本地的一小塊資料,它會在瀏覽器下次向同一服務器再發起請求時被攜帶并發送到服務器上,通常,它用于告知服務端兩個請求是否來自同一瀏覽器,如保持用戶的登錄狀態,
2、cookie原理
① Cookie技識訓根據從服務器端發送的回應報文內的一個叫做Set-Cookie的首部欄位資訊,通知客戶端保存Cookie,

② 客戶端再向服務器端發送請求的時候,客戶端會在請求報文中加入Cookie值后發送出去,服務器端會檢查客戶端發送的請求中有沒有Cookie值,然后對比服務器上的記錄,最后確定是哪一個客戶端,之前的資訊狀態是什么,

這樣一來,服務器就能夠分辨出發送請求的客戶端究竟是哪一個了,
二、session
1、session介紹
session是一種在服務端記錄用戶資訊的技術,是在無狀態的HTTP協議下,服務端記錄用戶狀態時用于標識具體用戶的機制,它是在服務端保存的用來跟蹤用戶的狀態的資料結構,可以保存在檔案、資料庫或者集群中,
2、session原理

-
Session是存放在服務器端、用來存放用戶資料的(類似于HashTable結構),
-
當瀏覽器第一次發送請求時,服務器自動生成了一個HashTable和一個Session ID用來唯一標識這個HashTable,并將其通過回應發送到瀏覽器,
-
當瀏覽器第二次發送請求,會將前一次服務器回應中的Session ID放在請求中一并發送到服務器上,服務器從請求中提取出Session ID,并和保存的所有Session ID進行對比,找到這個用戶對應的HashTable,以此來達到共享資料的目的,
三、cookie和session區別
1. 存盤位置不同:Cookie是將用戶資料通過加密的方式保存在客戶端,大多數情況Cookie存盤在瀏覽器;Session是用于控制客戶端和服務端的連接,Session存盤在服務器;
2. 存盤容量不同:單個Cookie保存的資料不得超過4kb,一個站點最多20個Cookie,Session一般情況下沒有上限,不過建議不要存放太多東西,否則影響性能;
3. 存取方式不同:Cookie只能用ASCII字串,通過編碼方式獲取Unicode字符或者二進制資料,不好存盤復雜的資訊,而Session能存盤任何型別的資料;
4. 隱私策略/安全性不同:Cookie放在客戶端,可以進行Cookie欺騙,所以不安全,Session放在服務端,更加安全;
5. 有效期不同:Cookie可以設定屬性達到長期有效,Session依賴于JSESSIONID的Cookie,Cookie JSESSIONID的過期時間默認為-1,只需要關閉視窗Session就會失效,就算不依賴Cookie,用UrL重寫也不能完成,如果Session超時時間過長,容易導致記憶體溢位;
6. 服務器壓力不同:Cookie保存在本地,不存在服務端壓力,Session保存在服務端,每個用戶產生一個Session,當訪問增多,會比較占用服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用Cookie,

現在有登錄、充值兩個介面,在未登錄時,直接呼叫充值介面,
import requests
url = 'http://127.0.0.1:8000/recharge'
payload = {
"mobilephone":"1530272****",
"amount":100
}
recharge_res = requests.post(url,data=payload)
print(recharge_res.json())
請求結果:提示請先登錄,
{'status': 0, 'code': None, 'data': None, 'msg': '抱歉,請先登錄,'}
這時候,今天的主角cookie和session閃亮登場了,

四、cookie應用
import requests
# 登錄介面
url = 'http://127.0.0.1:8000/user/login'
payload = {
"mobilephone":"1530272****",
"pwd":"123456"
}
login_res = requests.post(url,data=payload)
print(login_res.json())
# 獲取回應結果的cookies
cookies = login_res.cookies
print(cookies)
# 充值介面
url = 'http://127.0.0.1:8000/recharge'
payload = {
"mobilephone":"1530272****",
"amount":100
}
# 充值介面請求時攜帶cookies
recharge_res = requests.post(url,data=payload,cookies=cookies)
print(recharge_res.json())
五、session應用
import requests
# 登錄介面
url = 'http://127.0.0.1:8000/user/login'
payload = {
"mobilephone":"1530272****",
"pwd":"123456"
}
# 創建session會話管理
session = requests.session()
login_res = session.post(url,data=payload)
print(login_res.json())
# 充值介面
url = 'http://127.0.0.1:8000/recharge'
payload = {
"mobilephone":"1530272****",
"amount":100
}
recharge_res = session.post(url,data=payload)
print(recharge_res.json())
總結:本文主要介紹cookie、session原理及在自動化程序中如何利用cookie、session保持會話狀態,
下一篇:python自動化測驗-token詳解及應用

感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
① 2000多本Python電子書(主流和經典的書籍應該都有了)
② Python標準庫資料(最全中文版)
③ 專案原始碼(四五十個有趣且經典的練手專案及原始碼)
④ Python基礎入門、爬蟲、web開發、大資料分析方面的視頻(適合小白學習)

⑤ Python學習路線圖(告別不入流的學習)
在我的QQ技術交流群里(技術交流和資源共享,廣告進來腿給你打斷)
可以自助拿走,群號953306497(備注“csdn111”)群里的免費資料都是筆者十多年測驗生涯的精華,還有同行大神一起交流技術哦,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/290093.html
標籤:python
上一篇:python實作猜數字游戲
下一篇:python第一周總結
