什么是 Cookie 和 Session:

简单来说,我们访问每一个互联网页面,都是通过 HTTP 协议进行的,而 HTTP 协议是一个无状态协议,所谓的无状态协议即无法维持会话之间的状态。比如,仅使用 HTTP 协议的话,我们登录一个网站的时候,假如登录成功了,但是当我们访问该网站的其他网页的时候,该登录状态则会消失,此时还需要再登录一次,只要页面涉及更新,就需要反复的进行登录,这是非常不方便的。所以此时,我们需要将对应的会话信息,比如登录成功等信息通过一些方式保存下来,比较常用的方式有两种:通过 Cookie 保存会话信息或通过 Session 保存会话信息。

如果是通过 Cookie 保存会话信息,此时会将所有的会话信息保存在客户端,当我们访问同一个网站的其他页面的时候,会从 Cookies 中读取对应的会话信息,从而判断目前的会话状态,比如可以判断是否已经登录等。显然,这一种方式我们会用到 Cookie。如果是通过 Session 保存会话信息,会将对应的会话信息保存在服务器端,但是服务器端会给客户端发 SessionID 等信息,这些信息一般存在客户端的 Cookie 中,当然,如果客户端禁止了 Cookie,也会通过其他方式存储。但是,目前来说,大部分的情况还是会将这一部分的信息存到 Cookie 中。然后,用户在访问该网站其他网页的时候,会从 Cookie 中读取这一部分信息,然后从服务器中的 Session 中根据这一部分 Cookie 信息检索出该客户端的所有会话信息,然后进行会话控制。显然,使用 Session 的方式来保存会话信息,大部分的时候,还是会到 Cookie。

通过前面的分析,可以看到,不管是通过哪种方式进行会话控制,在大部分时候,都会用到 Cookie。比如在爬虫的登录中,如果没有 Cookie,我们登录成功了一个网页,但如果我们要爬去该网站的其他网页的时候,仍然会是未登录状态,如果有了 Cookie,当我们登录成功后,爬取该网站的其他网页时,则会保持登录状态进行内容的爬取。

使用 Cookies 维持会话:

import requests

headers = {    //先查看浏览器的请求头信息,获取Cookies信息,然后伪造请求头发起请求
"Cookie": "BAIDUID=70178D6FAB7868D8E45892D6755702D3:FG=1; PSTM=1552269060; BIDUPSID=D00BA89253A15C11C23CD0C7BFD1004A; ......"
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
} req = requests.get("http://www.baidu.com/", headers=headers)
print(req.text)

使用 Session 维持会话:

import requests

s = requests.session()                           //创建一个session对象,用来存储session信息
s.get("http://www.baidu.com") //当我们访问百度之后,session信息就已经被存储在session对象中了
req = s.get("http://www.baidu.com/?wd=hello") //使用session对象再访问百度的其他子页,就相当于携带session信息进行访问了
print(req.text)

使用 requests 维持会话的更多相关文章

  1. Python+requests维持会话

    Python+requests维持会话 一.使用Python+requests发送请求,为什么要维持会话? 我们是通过http协议来访问web网页的,而http协议是无法维持会话之间的状态.比如说我们 ...

  2. requests.session()会话保持

    可能大家对session已经比较熟悉了,也大概了解了session的机制和原理,但是我们在做爬虫时如何会运用到session呢,就是接下来要讲到的会话保持. 首先说一下,为什么要进行会话保持的操作? ...

  3. Requests:Python HTTP Module学习笔记(二)(转)

    在上一篇日志中对Requests做了一个整体的介绍,接来下再介绍一些高级的用法,主要资料还是翻译自官网的文档,如有错漏,欢迎指正. 参考资料:http://docs.python-requests.o ...

  4. 爬虫入门系列(二):优雅的HTTP库requests

    在系列文章的第一篇中介绍了 HTTP 协议,Python 提供了很多模块来基于 HTTP 协议的网络编程,urllib.urllib2.urllib3.httplib.httplib2,都是和 HTT ...

  5. requests库入门14-Cookie

    因为http是没有状态的协议,上一个请求和下一个请求是没有关联.但是现实中又需要有关联,比如一个页面某个操作需要登陆之后才能进行,没有登陆就提示你登陆.为了实现这样的效果,所以出现了Cookie和Se ...

  6. Python3 requests 库

    requests 安装 使用 requests 发送 GET 请求 使用 requests 发送 POST 请求 使用 requests 维持会话 使用 requests 访问 HTTPS 使用 re ...

  7. 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)

    代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...

  8. Python的Requests库基本方法函数

    一.Requests 库的七个常用函数: 1. requests.request(method,url,**kwargs) :method:请求方式,对应get/put/post等七种 :拟获取页面的 ...

  9. python之requests.session()使用

    背景:使用requests.session会话对象先登录至豆瓣网,再进入“我的豆瓣”. 首先说一下,为什么要进行会话保持的操作? requests库的session会话对象可以跨请求保持某些参数. 说 ...

随机推荐

  1. Rscripts的使用,以及如何为R脚本传参数

    一.在windows下使用Rscript: 1.进入cmd.exe下,将当前工作目录转到Rscript.exe所在目录下面,然后调用Rscript  **.R文件即可.但是所调用的.R文件必须是在R的 ...

  2. ACTIVE NEURAL LOCALIZATION

    用贝叶斯滤波器定义状态,用rl帮助定位. 这个方法需要对地图和角度进行离散化,当地图很大,角度较精细时,输出会很大,所以不太可能用到大地图,高精度角度的任务上.

  3. SQL数据查询之——嵌套查询

    一.概念描述 在SQL语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块.将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询.例如: ...

  4. SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...

  5. Java如何打印异常的堆栈?

    在Java编程中,如何打印异常的堆栈? 此示例显示如何使用异常类的printStack()方法打印异常的堆栈. package com.yiibai; public class PrintStackT ...

  6. JDBC PrepareStatement对象执行批量处理实例

    以下是使用PrepareStatement对象进行批处理的典型步骤顺序 - 使用占位符创建SQL语句. 使用prepareStatement()方法创建PrepareStatement对象. 使用se ...

  7. 转换基于Maven的Web应用程序支持Eclipse IDE

    在上一节教程中,使用Maven创建了一个Web应用程序.这里有一个指南,告诉你如何转换Web应用程序到Eclipse IDE支持的形式. 注意,通过WTP工具Eclipse IDE支持Web应用程序, ...

  8. e775. 设置JList组件项的维数

    By default, the width of the list is determined by the longest item and the height is determined by ...

  9. Eclipse/MyEclipse上配置Spring环境

    在MyEclipse上配置Spring环境 myeclipse其实已经集成Spring的开发环境,我们只需在新建的项目上添加spring的配置环境就可以 新建一个java项目 选中创建好的项目之后,在 ...

  10. 多媒体开发之rtmp---rtmp client 端的实现

    去年我就在流媒体朋友圈认识winlin 老乡,本来想参与srs的开发,可惜今年5月份身体不好,今天想起rtmp 做直播,有翻到老乡的博文如下: http://blog.csdn.net/win_lin ...