Q: 什么是CookJar?
A: 1、CookJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。【http.cookiejar
库中的CookieJar
】
2、CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。
- FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
- MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。
- LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。
Q:如何实现?
A:示例代码如下:
# --coding:utf-8--
from urllib import request
from http.cookiejar import CookieJar
from urllib import parse
login_url = 'https://i.meishi.cc/login_t.php'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
}
# 1. 登录
cookieJar = CookieJar()
handler = request.HTTPCookieProcessor(cookieJar)
opener = request.build_opener(handler)
post_data = parse.urlencode({'username': '账号', 'password': '密码'})
opener.open(login_url, data=post_data.encode('utf-8'))
# 2. 访问个人网页
person_url = 'https://i.meishi.cc/cook.php?id=14823414'
rq = request.Request(person_url, headers=headers)
resp = opener.open(rq)
print(resp.read().decode('utf-8'))
备注:parse.urlencode(data) :其中data是dict类型数据。将dict类型参数转化为query_string格式(key=value&key=value),并且将中文转码。
encode('utf-8'):将query_string格式转换为bytes(字节流)类型。b'{"jsonrpc": "2.0", "method": "user.login"}