天天看點

Python程式設計:cookiejar的使用代碼示例擷取cookie儲存cookie到檔案從檔案讀取cookie

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