网站首页 > 技术文章 正文
当我们访问一个需要用户名和密码登录的网站(例如某宝)时,只要我们注册好并成功登录后,下次访问该网站时,网站就会记住我们的登录信息,而无需重新登录。我们都知道HTTP协议是无状态的,是不可能对用户名和密码进行记录的,那浏览器或者服务器是怎么做到的?其实,这里面就使用到了一种叫Cookie的技术。
1 Cookie是什么?
cookie 是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。当我们在浏览器内输入url,浏览器会向服务器发送一个HTTP请求,相应的,服务器会响应这个请求,向浏览器返回响应的响应信息。所谓Cookie,可以简单认的为是在浏览器端记录包括登陆状态在内的各种属性值的容器名称,其实就是服务器为了保持浏览器与服务器之间连通状态,而在用户本地上创建的数据。只要用户再一次登陆,服务器会主动地寻找这些预存的数据,而无需再要求像第一次一样的操作。
当客户端首次请求访问服务器时,服务器先在客户端存放包含该客户的相关信息的Cookie,以后客户端每次请求访问服务器时,都会在HTTP请求数据中包含Cookie,服务器解析HTTP请求中的Cookie,就能由此获得关于客户的相关信息。
Cookie数据到底长啥样?打开chrome浏览器,打开豆瓣网站,按F12键进入开发者模式,如下图:
从上图可以看到,其实Cookie数据就是一串代表特殊意义的字符串,具体是由许多个键值对组成。
2 Opener与CookieJar
当我们获取一个URL时,就要使用一个opener对象,之前使用的urlopen方法是一个默认的opener,这个默认的opener是不能设置使用Cookie的,也就是说我们必须创建一个更一般的opener来处理Cookie。
在python3.x中,使用的是http.cookiejar模块来对cookie信息进行管理的,其功能简介如下:
- CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
- 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实例。
其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCookieJar()。
猜你喜欢
- 2024-09-27 urllib用账号密码登陆,携带cookie访问链接
- 2024-09-27 简单说说爬虫这个神奇的工具(简单说说爬虫这个神奇的工具怎么写)
- 2024-09-27 python接口自动化(十三)--cookie绕过验证码登录(详解)
- 2024-09-27 一键生成 QQ 历史报告,谁最在意你?
- 2024-09-27 Python爬虫Resquests库的使用(python爬虫re库如何换行)
- 2024-09-27 开源:仿网易云音乐Android客户端(安卓开发仿网易云)
- 2024-09-27 你要偷偷的学Python,然后惊呆所有人(第十一天)
- 2024-09-27 package-lock.json的作用?(packagelockjson是做什么用的)
- 2024-09-27 Python保存Cookie到TXT文件(python的cookies)
- 2024-09-27 python爬虫实战之Headers信息校验-Cookie
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)