我們知道,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 定義的
- 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實現反爬蟲有一定認識。
到此這篇關于Django利用Cookie實現反爬蟲的文章就介紹到這了,更多相關Django反爬蟲內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python中利用aiohttp制作異步爬蟲及簡單應用
- Python爬蟲之線程池的使用
- python基礎之爬蟲入門
- python爬蟲請求庫httpx和parsel解析庫的使用測評
- Python爬蟲之爬取最新更新的小說網站
- 用Python爬蟲破解滑動驗證碼的案例解析
- Python爬蟲之必備chardet庫
- Python爬蟲框架-scrapy的使用
- Python爬蟲之爬取二手房信息
- python爬蟲之爬取百度翻譯
- python爬蟲基礎之簡易網頁搜集器
- python爬蟲之生活常識解答機器人
- Python異步爬蟲實現原理與知識總結