我們知道,Diango 接收的 HTTP 請求資訊里帶有 Cookie 資訊,Cookie的作用是為了識別當前用戶的身份,通過以下例子來說明Cookie的作用,
例:
瀏覽器向服務器(Diango)發送請求,服務器做出回應之后,二者便會斷開連接(會話結束),下次用戶再來請求服務器,服務器沒有辦法識別此用戶是誰,比如用戶登錄功能,如果沒有 Cookie 機制支持,那么只能通過查詢資料庫實作,并且每次重繪頁面都要重新操作一次用戶登錄才可以識別用戶,這會給開發人員帶來大量的冗余作業,簡單的用戶登錄功能會給服務器帶來巨大的負載壓力,
Cookie 是從瀏覽器向服務器傳遞資料,讓服務器能夠識別當前用戶,而服務器對 Cookie 的別機制是通過 Session 實作的,Session 存盤了當前用戶的基本資訊,如姓名,年齡和性別等,由于Cookie 存盤在瀏覽器里面,而且Cookie 的資料是由服務器提供的,如果服務器將用戶資訊直接保存在瀏覽器中,就很容易泄露用戶資訊,并且Cookie大小不能超過4KB,不能支持中文,因此要一種機制在服務器的某個域中存盤用戶資料,這個域就是Session,
總而言之,Cookie 和 Session 是為了解決HTTP協議無狀態的弊端、為了讓瀏覽器和服務端建立長久聯系的會話而出現的,
Cookie除了解決 HTTP 協議無狀態的弊端之外,還可以利用 Cookie 實作反爬蟲機制,隨著大資料和人工智能的發展,爬蟲技術日益完善,網站為了保護自身資料的安全性和負載能力,都會在網站里設定反爬蟲機制,
由于 Cookie 是通過 HTTP 協議從瀏覽器傳遞到服務器的,因此從視圖函式的請求物件 request 可以獲取 Cookie 物件,而Diango提供以下方法來操作Cookie物件:
# 獲取 Cookie 與 Python 的字典讀取方法一致 request,COOKIES['uuid'] request,COOKIES,get('uuid') # 在回應內容中添加 Cookie, 將 Cookie 回傳給瀏覽器 return HttpResponse('Hello world') response,set_cookie('key', 'value') return response # 在回應內容中洗掉Cookie return HttpResponse('Hello world') response,delete_cookie('key') return response
操作 Cookie 物件無非就是對 Cookie 進行獲取、添加和洗掉處理,添加Cookie 資訊是使用 set_cookie 方法實作的,該方法是由回應類 HttpResponseBase 定義的
set_cookie 方法定義了9個函式引數,每個引數的說明如下,
- key:設ECookie的key,類似字典的key,
- value:設 Cookie的value,類似字典的value,
- max age:設定Cookie的有效時間,以秒為單位,
- expires:設定Cookie的有效時間,以日期格式為單位,
- path:設定Cookie的生效路徑,默認值為根目錄(網站首頁)
- domain:設定Cookie生效的域名,
- secure:設定傳輸方式,若為False,則使用HTTP,否則使用HTTPS,
- httponly:設定是否只能使用HTTP協議傳輸,
- samesite:設定強制模式,可選值為 lax 或 strict,主要防止CSRF攻擊,
常見的反爬蟲主要是設定引數max_age,expires 和 path,引數 max_age或 expires 用于設定 Cookie 的有效性,使爬程式無法長時間爬取網站資料;引數 path 用于將 Cookie 的生成程序隱藏起來,不容易讓爬蟲開發者找到并破解,
希望各位讀者對Cookie實作反爬蟲有一定認識,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279507.html
標籤:Python
