python爬微信公众号前10篇历史文章(6)-话说http cookies
早期Web开发面临的最大问题之一是如何管理状态。简言之,服务器端没有办法知道两个请求是否来自于同一个浏览器。这是cookies的起源。
- 什么是cookie?
A cookie is a small stub of information left by a website on a visitor's computer through the web browser.
一个cookie就是存储在用户主机浏览器中的一小段文本文件。Cookies是纯文本形式,它们不包含任何可执行代码。存储cookie是浏览器的功能。
基于一系列规则在之后的每个请求中都将该信息返回至服务器。Web服务器之后可以利用这些信息来标识用户。
设置一个cookie,之后只要这个cookie存在并且合法,你就可以自由的浏览这个站点的所有部分。当网页要发http
请求时,浏览器会先检查是否有相应的cookie
,有则自动添加在request header
中的cookie
字段中。
再次,cookie只是包含了数据,就其本身而言并不有害。
每个域名下的cookie 的大小最大为4KB,每个域名下的cookie
数量最多为20个(但很多浏览器厂商在具体实现时支持大于20个)。
- cookie通信:
request header
中自动添加了Cookie
字段(我并没有手动添加这个字段哦~),Cookie
字段的值其实就是我设置的 cookie
。这个请求最终会发送到http://ppsc.sankuai.com
这个服务器上,这个服务器就能从接收到的request header
中提取cookie
。
cookie
的基本通信流程:设置cookie
=> cookie
被自动添加到request header
中 => 服务端接收到cookie
- cookie的构成:
set cookie: name=value; domain=.mozilla.org; expires=Feb, 13-Mar-2018 11:47:50; path=/; secure
名称(name):一个唯一确定cookie的名称,部分大小写,cookie的名字必须是经过URL编码的,一般可以采用某个前缀在加上当前时间的做法,这样的话名称能够确保是唯一的,也比较方便。
值(value):存储在cookie中的字符串值,必须经过被URL编码
失效时间(expires):表示cookie何时应该被删除的时间戳,这个日期是GMT格式的日期,如果设置是以前的时间,cookie会被立刻删除。上诉cookie的失效时间是Feb,13-Mar-2018 11:47:50。
- 域(domain):对于哪个域是有效的,如果没有设置的话,默认来自设置cookie的那个域,在上诉例子中就是.Mozilla.org
- 路径(path):指定域中的那个路径应该像服务器发送cookie,/ 表示没有限制。
path
默认值为设置该cookie
的网页所在的目录。domain
和path
2个选项共同决定了cookie
何时被浏览器自动添加到请求头部中发送出去。 - 安全标志(secure):指定以后,cookie只有在使用SSL连接的时候才可以发送到服务器。
expires
是 http/1.0协议中的选项,在新的http/1.1协议中expires
已经由max-age
选项代替,两者的作用都是限制cookie 的有效时间。expires
的值是一个时间点(cookie失效时刻= expires
),而max-age
的值是一个以秒
为单位时间段(cookie失效时刻= 创建时刻+ max-age
)。
另外,max-age
的默认值是-1
(即有效期为session
);若max-age
有三种可能值:负数、0、正数。负数:有效期session
;0
:删除cookie
;正数:有效期为创建时刻+ max-age
- 设置cookie:
cookie
既可以由服务端来设置,也可以由客户端来设置。
- 服务端设置 cookie: 不管你是请求一个资源文件(如 html/js/css/图片),还是发送一个
ajax
请求,服务端都会返回response
。而response header
中有一项叫set-cookie
,是服务端专门用来设置cookie
的。一个set-Cookie
字段只能设置一个cookie
,当你要想设置多个 cookie,需要添加同样多的set-Cookie
字段。 客户端设置 cookie:在网页即客户端中我们也可以通过
js
代码来设置cookie。
document.cookie="age=12; expires=Thu, 26 Feb 2116 11:50:25 GMT; domain=sankuai.com; path=/";
- cookie的应用:
购物车(网购)
自动登录(登录账号时的自动登录)
精准广告
平常浏览网页时有时会推出商品刚好是你最近浏览过,买过的类似东西,这些是通过cookie记录的。记住登录状态
python request模块提供的cookie相关内容:
请求会话:class requests.
Session
Provides cookie persistence, connection-pooling, and configuration.
创建一个会话之后,可以访问它的CookieJar,它保存了所有这个会话中的cookie信息。
在发送请求的header中设置cookie信息:
session.get(url, headers= '{'Cookie': 'SUV=43BBE548642E940A000000005AA1D6FD;SNUID=21D9862A6266048D992B9AFC635824EB;'})
python爬微信公众号前10篇历史文章(6)-话说http cookies的更多相关文章
- python爬微信公众号前10篇历史文章(1)-思路概览
作为程序员,要时刻保持一颗好奇心和想要学习的姿态. 练习怎样利用搜狗微信爬取某指定微信公众号的历史文章.爬取微信公众号本身难度非常大,感谢搜狗提供了一个可以爬取数据的平台. 代码部分参考于: http ...
- python爬微信公众号前10篇历史文章(4)-正则表达式RegularExpressionPattern
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Pytho ...
- python爬微信公众号前10篇历史文章(5)-JSON相关内容小结
json - JSON encoder and decoder JSON: JavaScript object notation,是一种轻量级的数据交换格式.JSON 是 JS 对象的字符串表示法,它 ...
- python爬微信公众号前10篇历史文章(3)-lxml&xpath初探
理解lxml以及xpath 什么是lxml? python中用来处理XML和HTML的library.与其他相比,它能提供很好的性能, 并且它支持XPath. 具体可以查看官方文档->http: ...
- python爬微信公众号前10篇历史文章(2)-拼接URL&发送http请求
如何拼接想要的url http://weixin.sogou.com/weixin?type=1&page=1&ie=utf8&query=%E5%A4%A7%E7%BA%BD ...
- python编写微信公众号首图思路详解
前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...
- Python微信公众号开发—小白篇
本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造专栏],欢迎大家关注. github仓库地址http ...
- Python微信公众号教程基础篇——收发文本消息
1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...
- Python微信公众号开发—小白篇(1)
本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造社区],欢迎大家关注. github仓库地址http ...
随机推荐
- PAT 1003. Emergency 单源最短路
思路:定义表示到达i的最短路径数量,表示到达i的最短径,表示最短路径到达i的最多人数,表示从i到j的距离, 表示i点的人数.每次从u去更新某个节点v的时候,考虑两种情况: 1.,说明到达v新的最短路径 ...
- NOIP2017记
Day-1~Day0 帮忙布置考场,打印座位表耗掉了不少XFZ的白纸(被瞪了一眼),围着三四楼跑了不知道多少圈贴座位表,跑到绝望...... 然后试了一下机,性能还可以,但是大佬用的机的cpu都不是很 ...
- 叼叼叼,HTML5日期(Date)类型和文本(Text)类型互相转换
<input placeholder="From" class="form-control" type="text" onfocus= ...
- 内置函数--global() 和 local()
一 . globals :返回当前作用域内全局变量的字典. >>> globals() {'__spec__': None, '__package__': None, '__bu ...
- nginx笔记2-负载均衡
负载均衡实现方式分为两类:1硬件类,2软件类. 硬件类:F5(这是一种硬件,并不是刷新啊,不要误解) 优点:非常快,可靠性高,并发量大.缺点:太贵,成本高,不方便,最致命的是不能将动态请求和静态请求 ...
- 转 Caffe学习系列(5):其它常用层及参数
本文讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层及其它们的参数配置. 1.softmax-loss so ...
- 【DDD】领域驱动设计实践 —— 一些问题及想法
在社区系统的DDD实践过程中,将遇到一些问题和产生的想法记录下来,共讨论. 本文为[DDD]系列文章中的其中一篇,其他内容可参考:使用领域驱动设计思想实现业务系统. 1.dto.model和entit ...
- GAN︱GAN 在 NLP 中的尝试、困境、经验
GAN 自从被提出以来,就广受大家的关注,尤其是在计算机视觉领域引起了很大的反响,但是这么好的理论是否可以成功地被应用到自然语言处理(NLP)任务呢? Ian Goodfellow 博士 一年前,网友 ...
- Android RocooFix热修复动态加载框架介绍
RocooFix Another hotfix framework 之前的HotFix项目太过简单,也有很多同学用Nuwa遇到很多问题,作者也不再修复,所以重新构建了一套工具. Bugfix 2016 ...
- AM335x(TQ335x)学习笔记——WM8960声卡驱动移植
经过一段时间的调试,终于调好了TQ335x的声卡驱动.TQ335x采用的Codec是WM8960,本文来总结下WM8960驱动在AM335x平台上的移植方法.Linux声卡驱动架构有OSS和ALSA两 ...