Cookies的使用——从cookiejar说起

一、什么是Cookie?

Cookie是一种存储在客户端的小型数据文件,它通常由Web服务器发送给客户端的Web浏览器并存储在本地。Web浏览器会在之后的请求中自动发送该Cookie给Web服务器。Cookie包含了一些关于客户端和服务器之间会话的信息,比如登录凭据、购物车商品、上次访问时间等等。

二、为什么要使用Cookie?

HTTP是一种无状态协议,也就是说它无法记住之前客户端和服务器之间的交互。每次HTTP请求都是一个独立的事件,服务器无法知道是否是同一个客户端在发送请求。这时,Cookie就派上了用场。通过在客户端存储相关数据,Cookie可以在之后的请求中将这些数据发送给服务器,这样服务器就能够识别出是同一个客户端在发送请求。

三、Python中的Cookie库

Python中有很多HTTP客户端库可以用来发送HTTP请求,比如requests、http.client等。不过这些库并没有直接提供对Cookie的支持。此时,Python中的http.cookiejar库就派上了用场。

1、cookiejar库概述

cookiejar库是Python标准库中的一部分,它提供了一个CookieJar类作为基础类,可以用于管理HTTP cookies。CookieJar是一个抽象类,实际上我们要使用它的子类来管理我们的cookies。

2、cookiejar库的使用方法

cookiejar库提供了很多种不同的Cookie管理类,我们可以根据不同的需求选择不同的类。下面,我们以HTTPCookieProcessor和LWPCookieJar两个类为例,分别介绍基于内存和硬盘的Cookie存储方法。

(1)HTTPCookieProcessor

HTTPCookieProcessor用于处理HTTP请求中的Cookies,它的作用是创建一个CookieJar实例,并嵌入一个opener对象中。这样,在发送HTTP请求时,opener对象就会自动管理CookieJar中的Cookies。


import http.cookiejar
import urllib.request

cookie = http.cookiejar.CookieJar()  # 创建CookieJar实例
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie))
response = opener.open("http://www.baidu.com")

for item in cookie:
    print(item.name +"="+ item.value)

首先,我们创建了一个cookie实例,然后把它传给HTTPCookieProcessor,创建了一个支持Cookies的opener对象。然后,我们用opener来发送了一个HTTP请求,并在结果中输出了CookieJar中的内容。

(2)LWPCookieJar

LWPCookieJar是CookieJar的派生类,它可以将Cookies保存在本地文件中。LWPCookieJar的使用方式与HttpCookieProcessor基本相同。我们只需要把上面的代码中的CookieJar()替换为LWPCookieJar(filename)即可。


import http.cookiejar
import urllib.request

filename = 'cookies.txt'
cookie = http.cookiejar.LWPCookieJar(filename)  # 创建LWPCookieJar实例
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open("http://www.baidu.com")

# 保存CookieJar到文件
cookie.save(ignore_discard=True, ignore_expires=True)

# 从文件中读取CookieJar
cookie.load(filename=filename, ignore_discard=True)

for item in cookie:
    print(item.name +"="+ item.value)

这段代码与上一个示例代码的唯一区别在于我们创建了一个LWPCookieJar实例,并将文件名传递给它。在使用完毕后,我们可以将CookieJar保存到文件中,并在下一次使用时从文件中读取CookieJar。

四、如何在请求中发送Cookies

当我们使用CookieJar来管理cookies时,我们的代码会非常简洁。不过,在发起HTTP请求的时候,我们有时需要手动添加一些额外的cookies。这时,我们可以使用urllib库或requests库来发送HTTP请求,并在请求中添加cookies信息。

1、使用urllib发送Cookies

在使用urllib库发送HTTP请求时,我们可以用urllib.request.Request类来创建请求对象,并通过add_header()方法来添加HTTP header信息,例如cookies。


import http.cookiejar
import urllib.request

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)

# 添加cookies信息
req = urllib.request.Request("http://www.baidu.com")
req.add_header("Cookie", "key=value")

response = opener.open(req)

for item in cookie:
    print(item.name +"="+ item.value)

这里,我们创建了一个请求对象req,并使用add_header()方法添加了一条Cookie记录。

2、使用requests发送Cookies

requests库相对于urllib库更加Pythonic和易用,同样也可以发送HTTP请求并添加cookies。


import requests

# 添加cookies信息
cookies = {"key": "value"}

response = requests.get("http://www.baidu.com", cookies=cookies)

for item in response.cookies:
    print(item.name +"="+ item.value)

这里,我们创建了一个cookies字典,并将其传递给requests.get()方法。在得到response对象后,我们可以使用response.cookies属性来获取响应中的cookies。

五、总结

本文围绕cookies展开,从“What is Cookie”开始,逐步介绍了Python中的http.cookiejar库,在讲解完毕影响Cookie的那些因素后,拿出HTTPCookieProcessor和LWPCookieJar分别对只存在内存和硬盘上的Cookie进行了操作。最后,并举例介绍了如何发送Cookie信息。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/153861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-15 03:24
下一篇 2024-11-15 03:24

相关推荐

  • JavaScript清除Cookies的方法

    一、什么是Cookies Cookies是一种存储在用户计算机上的小文本文件,最初是为了方便用户在Web网站之间传递信息而创建的。每当用户访问Web站点时,Web服务器就会通过HT…

    编程 2025-01-20
  • js如何读取cookies里面某一个指,js如何获取cookie的值

    本文目录一览: 1、如何用js获取cookie中存储的值 2、js中如何获取cookies中的键值的值 3、如何使用js来获取cookie的值 4、jquery怎么读取cookie…

    编程 2025-01-09
  • php怎么写cookies(PHP怎么写fanclab)

    本文目录一览: 1、php cookies值怎么写 2、PHP中如何使用Cookie 3、在php中怎么设置cookie 4、请教如何使用php 写入cookie到指定的文件名中 …

    编程 2024-12-28
  • php之cookies小练习,php中cookie的使用

    本文目录一览: 1、PHP中如何使用Cookie 2、如何使用PHP操作cookie 3、PHP中cookie和session的区别实例分析 PHP中如何使用Cookie 比如设置…

    编程 2024-12-22
  • 使用Flask-Session管理Cookies

    一、Flask-Session是什么? Flask-Session是一个集成Flask和Python的Session支持的扩展,通过使用它,可以轻松地管理浏览器中的Cookies。…

    编程 2024-12-22
  • js页面如何设置cookies,javascript怎么设置

    本文目录一览: 1、如何用js修改页面cookies 2、js 怎么重新设置cookie 3、怎样用jquery来设置cookie 4、怎么设置整个网站的cookie js 5、J…

    编程 2024-12-12
  • php删除cookies,php删除文件夹

    本文目录一览: 1、php 如何清除当前域的所有cookie 2、3.PHP核心技术 3、php 清除COOKIE值的方法 4、php怎么删除cookie深入探讨 5、如何删除有一…

    编程 2024-12-07
  • 深入理解response.cookies

    一、response.cookies为空 在使用requests库发送GET或POST请求时,最常见的响应的一部分便是cookies。当然,在有些情况下,可能会出现response…

    编程 2024-12-03
  • jsoup带cookies(jsoup是什么意思)

    本文目录一览: 1、Jsoup发送http请求,get和post两种方式,分别带参数和不带参数 2、求真正有效的可以模拟登录新浪微博的java代码,后续可以用Jsoup进行抓取。急…

    编程 2024-10-04
  • nodejs带cookies(nodejs?)

    1、nodejs怎么设置cookie 2、简单NodeJS爬虫和使用cookie进行模拟登录 3、nodejs跨域怎么获取cookie // 获得客户端的Cookie     va…

    编程 2024-10-03

发表回复

登录后才能评论