CookieJar類的子類:
CookieJar:管理HTTP cookie值、存儲HTTP請求生成的cookie、向傳出的HTTP請求添加cookie的對象。整個cookie都存儲在記憶體中,對CookieJar執行個體進行垃圾回收後cookie也将丢失。
FileCookieJar:從CookieJar派生而來,用來建立FileCookieJar執行個體,檢索cookie資訊并将cookie存儲到檔案中。filename是存儲cookie的檔案名。delayload為True時支援延遲通路通路檔案,即隻有在需要時才讀取檔案或在檔案中存儲資料。
MozillaCookieJar:從FileCookieJar派生而來,建立與Mozilla浏覽器 cookies.txt相容的FileCookieJar執行個體。
LWPCookieJar:從FileCookieJar派生而來,建立與libwww-perl标準的 Set-Cookie3 檔案格式相容的FileCookieJar執行個體。
代碼示例
引入檔案
# -*- coding: utf-8 -*-
# @File : cookiejar_demo.py
# @Date : 2018-07-24
# @Author : Peng Shiyu
from http import cookiejar
from urllib import request
import ssl
# 關閉證書驗證, 避免urllib SSLError
ssl._create_default_https_context = ssl._create_unverified_context
擷取cookie
def get_cookie():
# 建立cookiejar執行個體對象
cookie = cookiejar.CookieJar()
print(cookie)
# <CookieJar[]>
# 建立管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
http_handler = request.HTTPHandler()
https_handler = request.HTTPSHandler()
# 建立請求求管理器
opener = request.build_opener(cookie_handler, http_handler, https_handler)
# 發起請求
url = "https://www.baidu.com"
req = request.Request(url)
response = opener.open(req)
# 檢視請求結果
print(response.reason) # OK
print(cookie)
"""
<CookieJar[
<Cookie BIDUPSID=B681378758CB3586029EBFFFF16FBDE2 for .baidu.com/>,
<Cookie PSTM=1532404690 for .baidu.com/>,
<Cookie BD_NOT_HTTPS=1 for www.baidu.com/>
]>
"""
儲存cookie到檔案
def save_cookie():
# 建立cookiejar執行個體對象
cookie = cookiejar.MozillaCookieJar("cookie.txt")
print(cookie)
# <MozillaCookieJar[]>
# 建立管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
http_handler = request.HTTPHandler()
https_handler = request.HTTPSHandler()
# 建立請求求管理器
opener = request.build_opener(cookie_handler, http_handler, https_handler)
url = "https://www.baidu.com"
req = request.Request(url)
# 發起請求
response = opener.open(req)
# 檢視請求結果
print(response.reason) # OK
cookie.save()
cookie.txt檔案如下cookie.txt檔案如下
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file! Do not edit.
.baidu.com TRUE / FALSE 3679895840 BIDUPSID 3204019AEE348DAEBBD8E7420F13494E
.baidu.com TRUE / FALSE 3679895840 PSTM 1532412187
www.baidu.com FALSE / FALSE 1532412493 BD_NOT_HTTPS 1
從檔案讀取cookie
按照cookie.txt的格式,修改自己的cookie檔案,儲存為httpbin-cookie.txt
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file! Do not edit.
.httpbin.org TRUE / FALSE 3679895840 username pengshiyu
.httpbin.org TRUE / FALSE 3679895840 password 123456
讀取
def load_cookie():
# 建立cookiejar執行個體對象
cookie = cookiejar.MozillaCookieJar()
cookie.load("httpbin-cookie.txt")
print(cookie)
# <MozillaCookieJar[<Cookie password=123456 for .httpbin.org/>, <Cookie username=pengshiyu for .httpbin.org/>]>
# 建立管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
http_handler = request.HTTPHandler()
https_handler = request.HTTPSHandler()
# 建立請求求管理器
opener = request.build_opener(cookie_handler, http_handler, https_handler)
url = "http://www.httpbin.org/cookies"
req = request.Request(url)
# 發起請求
response = opener.open(req)
# 檢視請求結果
print(response.reason) # OK
print(response.read())
# b'{"cookies":{"password":"123456","username":"pengshiyu"}}\n'
參考:
http.cookiejar庫之CookieJar