1. 程式人生 > 其它 >2022 帶你深入瞭解 Cookie是什麼? python修改cookie

2022 帶你深入瞭解 Cookie是什麼? python修改cookie

技術標籤:cookiehttppython

一、什麼是cookie,cookie的作用

HTTP協議本身是無狀態的。什麼是無狀態呢,無狀態是指Web瀏覽器與Web伺服器之間不需要建立持久的連線,這意味著當一個客戶端向伺服器端發出請求,然後Web伺服器返回響應(Response),連線就被關閉了,在伺服器端不保留連線的有關資訊。也就是說,HTTP請求只能由客戶端發起,而伺服器不能主動向客戶端傳送資料。即伺服器無法判斷使用者身份。Cookie實際上是一小段的文字資訊(key-value格式)。客戶端向伺服器發起請求,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie儲存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給伺服器。伺服器檢查該Cookie,以此來辨認使用者狀態。

打個比方,比如你去ACBC銀行,辦理了一張銀行卡。銀行卡里面存了身份資訊,手機號資訊,密碼等資訊。當你下次再辦業務時,機器能是夠識別你得卡,從而能辦理接下來的頁面。卡這個介質就相當於cookie,有個這個認證我們才能辦理接下的業務。

二、cookie機制

當用戶第一次訪問並登陸一個網站的時候,cookie的設定以及傳送會經歷以下4個步驟:

客戶端傳送一個請求到伺服器 --》 伺服器傳送一個HttpResponse響應到客戶端,其中包含Set-Cookie的頭部 --》 客戶端儲存cookie,之後向伺服器傳送請求時,HttpRequest請求中會包含一個Cookie的頭部 --》伺服器返回響應資料

在這裡插入圖片描述

三、cookie 屬性項

屬性項	屬性項介紹
NAME=VALUE	鍵值對,可以設定要儲存的 Key/Value,注意這裡的 NAME 不能和其他屬性項的名字一樣
Expires	過期時間,在設定的某個時間點後該 Cookie 就會失效
Domain	生成該 Cookie 的域名,如 domain="www.baidu.com"
Path	該 Cookie 是在當前的哪個路徑下生成的,如 path=/wp-admin/
Secure	如果設定了這個屬性,那麼只會在 SSL 連線時才會回傳該 Cookie

Expires
該屬性用來設定Cookie的有效期。Cookie中的maxAge用來表示該屬性,單位為秒。Cookie中通過getMaxAge()和setMaxAge(int maxAge)來讀寫該屬性。maxAge有3種值,分別為正數,負數和0。

  • maxAge屬性為正數,則表示該Cookie會在maxAge秒之後自動失效。
  • 當maxAge屬性為負數,則表示該Cookie只是一個臨時Cookie,不會被持久化,僅在本瀏覽器視窗或者本視窗開啟的子視窗中有效,關閉瀏覽器後該Cookie立即失效。
  • 當maxAge為0時,表示立即刪除Cookie

那麼maxAge設定為負值和0到底有什麼區別呢?

maxAge設定為0表示立即刪除該Cookie。
maxAge設定為負數,能看到Expires屬性改變了,但Cookie仍然會存在一段時間直到關閉瀏覽器或者重新開啟瀏覽器。

四、python 中使用cookie

1、直接將Cookie寫在header頭部

# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=181584
6425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a2
37a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=14839
26368'''
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Geck
o) Chrome/53.0.2785.143 Safari/537.36',
'Connection': 'keep-alive',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie': cookie}
url = 'https://kankandou.com/book/view/22353.html'
wbdata = requests.get(url,headers=header).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

2、使用requests插入Cookie

# coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = {
"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",
"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483
922031",
"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",
"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"
}
url = 'https://kankandou.com/book/view/22353.html'
wbdata = requests.get(url,cookies=cookie).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)