python接口自动化:自动获取cookie
session是什么:
用戶登錄后(發送登錄請求后,或者說用戶和服務器建立會話),服務器把用戶的身份信息,存儲在數據庫中,這就是session。
其中該身份信息的標識字段就是sessionID,各個系統存儲時sessionID字段的字段名稱不盡相同。
服務器會把sessionID放在響應headers中返回給用戶(瀏覽器),在headers中的字段名為“Set-Cookie”。
session從時效性上,分為兩種。
一種是限定有效期的,比如說五分鐘,舉個例子,你登錄系統后,五分鐘不操作該系統,就自動退出登錄,就是因為session失效了。
第二種是不限定有效期的,只要你還處于登錄狀態,那么就不會失效,一旦退出登錄,就失效。
瀏覽器接收到sessionID后,會把它存到瀏覽器所在的電腦上(限定有效期的session),或者存到系統內存上(不限定有效期的session),存儲的這個sessionID,在客戶端或者說瀏覽器層面,就稱為cookie,它是一個體積很小的文本串。
登錄后,瀏覽器發起其他操作,即向服務器發起其他請求時,會把存儲的cookie放在請求頭中**("cookie"字段)**隨著請求一起,發送給服務器,服務器接收到請求后,把cookie和數據庫中存儲的sessionID做對比,如果一致,就認定該用戶是之前登錄的用戶,于是開始處理該請求,如果不一致,則不處理該請求,并告知瀏覽器不處理的原因(常見的401/403狀態碼)
上一篇文章講到,調用登錄接口后,手動獲取服務器返回的sessionID,這樣比較麻煩,其實有自動獲取sessionID的辦法,代碼如下
"""用requests類的session方法創建一個session對象,自動獲取session""" import requestsif __name__ == '__main__':login_url = 'http://localhost/admin.php?m=mgr/admin.chklogin&ajax=1' # 定義登錄URLlogin_body = {"username": "admin", # 登錄賬號、密碼"password": "admin"}session_object = requests.session() # 創建session對象# 通過session對象的post方法發送登錄請求,語法和直接用requests.post()一樣login_request_res = session_object.post(url=login_url, data=login_body)# 發送get請求# 用session對象調用登錄接口后,對象本身會自動存儲服務器返回的sessionID,后續再通過session對象調用接口時,會自動將sessionID作為請求cookie傳入服務器get_request_res = session_object.get("http://localhost/admin.php?m=mgr/member2.memberlist&type=2")print(get_request_res.status_code) # 打印get請求狀態碼,查看是否調用成功我們通過fiddler抓到了發送的這兩個請求,如圖
登錄接口:
另一個get請求:
從兩張圖的對比我們可以看到,登錄接口返回的sessionID和另一個get請求發送的sessionID相同,說明request.session對象成功抓到了sessionID
總結
以上是生活随笔為你收集整理的python接口自动化:自动获取cookie的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欧氏距离、规范化欧氏距离=L2norma
- 下一篇: panda提取时间戳中的日期_CMIP6