使用 requests 维持会话
什么是 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 维持会话的更多相关文章
- Python+requests维持会话
Python+requests维持会话 一.使用Python+requests发送请求,为什么要维持会话? 我们是通过http协议来访问web网页的,而http协议是无法维持会话之间的状态.比如说我们 ...
- requests.session()会话保持
可能大家对session已经比较熟悉了,也大概了解了session的机制和原理,但是我们在做爬虫时如何会运用到session呢,就是接下来要讲到的会话保持. 首先说一下,为什么要进行会话保持的操作? ...
- Requests:Python HTTP Module学习笔记(二)(转)
在上一篇日志中对Requests做了一个整体的介绍,接来下再介绍一些高级的用法,主要资料还是翻译自官网的文档,如有错漏,欢迎指正. 参考资料:http://docs.python-requests.o ...
- 爬虫入门系列(二):优雅的HTTP库requests
在系列文章的第一篇中介绍了 HTTP 协议,Python 提供了很多模块来基于 HTTP 协议的网络编程,urllib.urllib2.urllib3.httplib.httplib2,都是和 HTT ...
- requests库入门14-Cookie
因为http是没有状态的协议,上一个请求和下一个请求是没有关联.但是现实中又需要有关联,比如一个页面某个操作需要登陆之后才能进行,没有登陆就提示你登陆.为了实现这样的效果,所以出现了Cookie和Se ...
- Python3 requests 库
requests 安装 使用 requests 发送 GET 请求 使用 requests 发送 POST 请求 使用 requests 维持会话 使用 requests 访问 HTTPS 使用 re ...
- 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)
代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...
- Python的Requests库基本方法函数
一.Requests 库的七个常用函数: 1. requests.request(method,url,**kwargs) :method:请求方式,对应get/put/post等七种 :拟获取页面的 ...
- python之requests.session()使用
背景:使用requests.session会话对象先登录至豆瓣网,再进入“我的豆瓣”. 首先说一下,为什么要进行会话保持的操作? requests库的session会话对象可以跨请求保持某些参数. 说 ...
随机推荐
- 【转】接口测试Session/Cookie笔记(二)
Windows系统运行计算器命令:calc python显示上一步操作命令:Alt+p python显示上一步操作结果:_(英文下划线) Session是存放在服务器的键值对 ,用于保存客户端的某个特 ...
- Navdeep Jaitly
中文名:耐迪普 杰特尼 早期: 印度科技大学 1994-1995 滑铁卢大学 1998-2000 博士: 多伦多大学 Hinton实验室 2008-2014 工作: 谷歌大脑 2014-2017 英伟 ...
- objective-C 的内存管理之-自动释放池(autorelease pool)
如果一个对象的生命周期显而易见,很容易就知道什么时候该new一个对象,什么时候不再需要使用,这种情况下,直接用手动的retain和release来判定其生死足矣.但是有些时候,想知道某个对象在什么时候 ...
- e796. 设置JSlider的方向
Besides being either horizontal or vertical, a slider can also be inverted. An inverted horizontal s ...
- CI框架 -- 核心文件 之 Common.php
system/core/Common.php 文件中可以定义 公共函数,我们可以在这里定义自己的公共函数.在任何情况下你都能够使用这些函数.使用他们不需要载入任何类库或辅助函数. 接下来分析下该文件中 ...
- Linux中./configure、make、make install详解
./configure && make && make install详解 2010-08-03 23:30:05 标签:休闲 ./configure &&a ...
- js模拟键盘事件
<!DOCTYPE html> <html> <head lang="zh-CN"> <meta charset="UTF-8& ...
- ubuntu16.04 桌面图标左侧,右侧,底部进行切换
转载:https://jingyan.baidu.com/article/e52e36154e6af340c60c518c.html 传统的 Unity 桌面环境,其应用程序启动器的容器——Launc ...
- u3d changeTexs
using UnityEngine; using System.Collections; using System.Collections.Generic; public class CTex : M ...
- UART Receive FIFO and Receive Timeout
为什么UART要有FIFO? 现代的CPU运转速度越来越快.UART的波特率通常达不到10M,在没有FIFO的情况下.每次填充数据给UART 或者 从UART取数据都会占用CPU的时间.这是极大的浪费 ...