2022 带你深入了解 Cookie是什么? python修改cookie

news/2024/5/18 14:12:21 标签: cookie, http, python
http://www.w3.org/2000/svg" style="display: none;">

cookiecookie_0">一、什么是cookiecookie的作用

HTTP协议本身是无状态的。什么是无状态呢,无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(Response),连接就被关闭了,在服务器端不保留连接的有关信息。也就是说,HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据。即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

打个比方,比如你去ACBC银行,办理了一张银行卡。银行卡里面存了身份信息,手机号信息,密码等信息。当你下次再办业务时,机器能是够识别你得卡,从而能办理接下来的页面。卡这个介质就相当于cookie,有个这个认证我们才能办理接下的业务。

cookie_5">二、cookie机制

当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个步骤:

客户端发送一个请求到服务器 --》 服务器发送一个HttpResponse响应到客户端,其中包含Set-Cookie的头部 --》 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部 --》服务器返回响应数据
https://img-blog.csdnimg.cn/20210125165311668.png" alt="在这里插入图片描述" />

cookie__10">三、cookie 属性项

python">属性项	属性项介绍
NAME=VALUE	键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样
Expires	过期时间,在设置的某个时间点后该 Cookie 就会失效
Domain	生成该 Cookie 的域名,如 domain="www.baidu.com"
Path	该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/
Secure	如果设置了这个属性,那么只会在 SSL 连接时才会回传该 Cookie

Expires
该属性用来设置Cookie的有效期。Cookie中的maxAge用来表示该属性,单位为秒。Cookie中通过getMaxAge()和setMaxAge(int maxAge)来读写该属性。maxAge有3种值,分别为正数,负数和0。

  • maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。
  • 当maxAge属性为负数,则表示该Cookie只是一个临时Cookie,不会被持久化,仅在本浏览器窗口或者本窗口打开的子窗口中有效,关闭浏览器后该Cookie立即失效。
  • 当maxAge为0时,表示立即删除Cookie

那么maxAge设置为负值和0到底有什么区别呢?

maxAge设置为0表示立即删除该Cookie。
maxAge设置为负数,能看到Expires属性改变了,但Cookie仍然会存在一段时间直到关闭浏览器或者重新打开浏览器。

python_cookie_32">四、python 中使用cookie

1、直接将Cookie写在header头部

python"># coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=181584
6425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a2
37a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=14839
26368'''
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Geck
o) Chrome/53.0.2785.143 Safari/537.36',
'Connection': 'keep-alive',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie': cookie}
url = 'https://kankandou.com/book/view/22353.html'
wbdata = requests.get(url,headers=header).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

2、使用requests插入Cookie

python"># coding:utf-8
import requests
from bs4 import BeautifulSoup
cookie = {
"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",
"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483
922031",
"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",
"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"
}
url = 'https://kankandou.com/book/view/22353.html'
wbdata = requests.get(url,cookies=cookie).text
soup = BeautifulSoup(wbdata,'lxml')
print(soup)

http://www.niftyadmin.cn/n/1429730.html

相关文章

MySQL数据库有关于表结构的操作

上次咱们介绍了一些有关于 MySQL数据库的操作~ 今天咱们来了解一下有关于 数据库表的操作~ 数据库表的操作 在介绍表操作之前,我们先来了解一下单表约束~ 单表约束 主键约束: primary key,要求被修饰的字段:非空、唯一。一…

python 对json 数据进行解码 编码 处理

json 模块提供了一种简单的方式来编码和解码 JSON 数据。 1.json.dumps 将一个python 数据结构转化为JSON: # 导入json 模块 import json data {name:myname,age:200, } # 使用json.dumps() 返回一个json json_str json.dumps(data)2.json.loads 将一个JSON编码…

【整理】java学习--JavaSE基础部分

Java中的常用类——Object类 Java中的常用类——String类 有关于 String 类的面试题 Java中的常用类——StringBuffer Java中的——基本类型包装类 正则表达式 Java中的时间类 Java中的其它类 Java中的集合——Collection类和迭代器 Java中的集合——list和Vector Ja…

测试: Excel 已经检测到“xxx.xsl“是SYLK文件,但是不能将其加载解决方法 解决办法

Excel 已经检测到"xxx.xsl"是SYLK文件,但是不能将其加载解决方法 SYLK 文件扩展名有 一 种主要文件类型,可以使用 Microsoft Excel 打开(由 Microsoft Corporation发布)。 总共有 三 种与此格式相关的软件程序。 通常这些是一种 M…

面试官最爱问的并发问题

在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性都牵扯出来&am…

python 二分查找 代码实现

二分查找 二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中…

趣图:一张图看懂 Java 多线程阻塞机制

趣图:现实和理想的差距 实现java多线程的3种方式,99%人没用过第3种 微信公众号:javafirst 扫码关注免费获取更多资源

MySQL数据库中表记录的增、删和改操作

来源:Java联盟 好的各位小伙伴~ 今天我们要了解的就是关于 MySQL数据库中 有关于表记录的操作 修改表记录 插入表记录 语法: 向表中插入某些列 insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3..); 向表中插入所有列 insert int…