在互联网中,cookie是一种常规的身份验证措施。在浏览网站时,网站通常会将cookie存储在浏览器中,以便在后续浏览时提供身份认证。通常,cookie从浏览器中读取,然后向Web服务器发送,以便在网站上进行身份验证。
Python的HTTP以及Cookie库和模块可以轻松地处理HTTP请求与响应。其中,对于cookie管理,Python提供了cookiejar库。使用cookiejar库,我们可以轻松地管理网站cookie,以简化身份认证流程。
在本篇文章中,我们将介绍如何使用Python的cookiejar库来管理cookies。
安装cookiejar库
要使用cookiejar库,我们需要安装它。Python已经包含了cookiejar库,也就是说,我们只需要从命令行或终端窗口运行
pip install cookiejar
如果我们采用的是Anaconda,那么运行conda install cookiejar即可。
使用简单的HTTP
首先,我们来学习如何使用cookiejar库来处理简单的HTTP请求。我们以Python简单的HTTP Post请求为例。
import urllib.request
import http.cookiejar
# 创建cookiejar对象
cookie_jar = http.cookiejar.CookieJar()
# 创建一个HTTPCookieProcessor对象
cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)
# 创建一个opener(打开器)
opener = urllib.request.build_opener(cookie_processor)
# 生成要post的数据
post_data = {'name':'John', 'age':33}
# 把数据变成urlencode格式
post_data = urllib.parse.urlencode(post_data)
# 转换成字节字符串
post_data = post_data.encode('utf-8')
# 构造Request
# Cookies以及post数据都在Headers里面
req = urllib.request.Request('http://www.example.com', post_data,
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Referer': 'http://w.abc.com',
'Cookie': 'foo=bar; bar=foo;'
})
# 发送Request
response = opener.open(req)
# 打印结果
print(response.read())
在上述代码中,我们创建了一个cookiejar对象,将其与HTTPCookieProcessor处理器结合在一起,形成一个opener。然后,我们通过urllib.request.Request()生成一个浏览器请求,并将请求发送到服务端。通过cookiejar库,我们可以对请求保存、更新和删除操作。
使用cookiejar
现在,我们来具体了解cookiejar库的工作原理。
使用HTTPCookieProcessor对象
我们将通过HTTPCookieProcessor对象来管理cookies。我们可以创建很多个CookieJar对象,但是每个Jar对象只能被一个HTTPCookieProcessor对象管理。因此,在使用cookiejar的时候,我们必须进行如下操作:
import urllib.request
import http.cookiejar
# 创建cookiejar对象
cookie_jar = http.cookiejar.CookieJar()
# 创建一个HTTPCookieProcessor对象
cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)
# 创建一个opener(打开器)
opener = urllib.request.build_opener(cookie_processor)
在上述代码中,我们创建了一个cookiejar对象,并使用cookiejar的HTTPCookieProcessor处理器来管理CookieJar。然后我们又将其与opener结合在一起。
使用Request
接下来,我们将通过生成Request请求来管理cookies。
import urllib.request
import http.cookiejar
# 创建cookiejar对象
cookie_jar = http.cookiejar.CookieJar()
# 创建一个HTTPCookieProcessor对象
cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)
# 创建一个opener(打开器)
opener = urllib.request.build_opener(cookie_processor)
# 生成要发送的数据
post_data = {'name':'John', 'age':33}
# 把数据变成urlencode格式
post_data = urllib.parse.urlencode(post_data)
# 转换成字节字符串
post_data = post_data.encode('utf-8')
# 构造Request
req = urllib.request.Request('http://www.example.com', post_data)
# 发送Request
response = opener.open(req)
在上述代码中,我们创建了一个含有昵称和年龄的post数据。通过字典将数据映射为urlencode格式,并构造Request请求。最后,我们将发送请求,并将响应存储在response对象中。
查看cookies
在上述代码中,我们访问了一个网站,并使用cookiejar来进行cookie的管理。接下来,我们将使用cookiejar的文件存储机制,记录cookiest。我们使用 MozillaCookieJar 类来实现。
import urllib.request
import http.cookiejar
# 创建cookiejar对象
cookie_jar = http.cookiejar.MozillaCookieJar()
# 创建一个HTTPCookieProcessor对象
cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)
# 创建一个opener(打开器)
opener = urllib.request.build_opener(cookie_processor)
# 生成要发送的数据
post_data = {'name':'John', 'age':33}
# 把数据变成urlencode格式
post_data = urllib.parse.urlencode(post_data)
# 转换成字节字符串
post_data = post_data.encode('utf-8')
# 构造Request
req = urllib.request.Request('http://www.example.com', post_data)
# 发送Request
response = opener.open(req)
# 保存cookie到文件,实现自动登录
cookie_jar.save('test_cookie.txt')
在上述代码中,我们使用了MozillaCookieJar来记录cookies。我们使用CookieJar对象时,需要指定文件名,将其保存到硬盘中。
加载cookie
接下来,我们将读取存储在硬盘中的cookies,以便在下一次发送请求时,复用先前的身份验证cookie。
import urllib.request
import http.cookiejar
# 创建cookiejar对象
cookie_jar = http.cookiejar.MozillaCookieJar()
# 从文件中读取cookie
cookie_jar.load('test_cookie.txt')
# 创建一个HTTPCookieProcessor对象
cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar)
# 创建一个opener(打开器)
opener = urllib.request.build_opener(cookie_processor)
# 构造Request
req = urllib.request.Request('http://www.example.com')
# 发送Request
response = opener.open(req)
在上述代码中,我们读取硬盘中的cookie信息,并将这些信息加载到cookie_jar中。接着,我们将cookie_jar与HTTPCookieProcessor展开合作,并将操作与opener合并。
通过这种方式,我们可以实现自动登录,以及实现一种无需再次登录的浏览方式。
总结
在本篇文章中,我们了解了如何使用cookiejar库管理cookies。我们学会了如何使用HTTPCookieProcessor处理器、如何使用请求来管理cookies、如何将cookies保存到硬盘并在下一次发送请求时加载cookies。
有了cookiejar库,我们可以轻松处理cookies,从而构建出更为完整的网络应用程序。