因为http是没有状态的协议,上一个请求和下一个请求是没有关联。但是现实中又需要有关联,比如一个页面某个操作需要登陆之后才能进行,没有登陆就提示你登陆。为了实现这样的效果,所以出现了Cookie和Session这两种机制。这里的Session是指http的一种机制,和requests的会话对象是两个东西。Session机制不太清楚就不写了。

Cookie机制原理

当浏览器第一次发送请求给服务器是没有带cookie的,当你登陆的时候,服务器会检查你的用户名和密码,发现确认有你这么一个用户,给出响应的同是,并给你设置一个cookie,浏览器收到服务器返回的cookie后,会解析并保存。之后再每次请求这个服务器的时候就会在请求头中把cookie带上,服务器会对这个cookie进行解析,发现是之前设置过的cookie,服务器就会给出响应。这样一个完整的交互流程就走完了。

如果服务器并没有设置cookie的有效期,一般来说cookie是在保存在内存里,浏览器关闭的时候失效。如果服务器设置过cookie的的有效期长时间有效,浏览器会把cookie保存到本地。就像有一些网站会有一个选项,7天免登录啥的,那个就是设置cookie的有效期。

在requests里,可以在请求中使用cookies参数来发送cookie到服务器,cookies参数需要指向一个dict。如果某些响应中带有cookie。可以使用cookies来打印得到的cookie

来看代码示例,看下登录Github,然后获得返回的cookie

先找到github登录界面,然后F12打开浏览器调试窗,然后输入错误的用户名密码,看下调试窗,左边Name叫做session的就是登录的请求

登录界面:https://github.com/login

登录接口地址是:https://github.com/seeion。

最下面Form Data就是请求时提交的表单数据,最上面两个是固定不变的,中间的这个token是在打开登录界面时动态生成的。下面两个是用户名和密码

也就是说,在我们打开登录界面的时候,会生成一个token。然后点击登录的时候,会把用户名,密码,token一起传过去

那第一步就是获取登录界面自动生成的token

import requests
import re
s = requests.session()#通过会话对象来登录,可以自动保存登录后过后的cookie等
r = s.get('https://github.com/login')#请求登录界面
resuit = r.text#获得登录界面的响应内容
tokens = re.findall(r'<input type="hidden" name="authenticity_token" value="(.*?)" />', resuit)#通过正则得到登录界面响应内容中自动生成的token,生成的是个数组
token = tokens[0]#只需要拿数组第一个字段
print(token)

成功拿到token之后,第二不就是把token放到请求头中,然后请求登录接口,成功之后就可以拿到返回的cookie了

url = 'https://github.com/session'
payloda = {'commit': 'Sign in',
'utf8': '✓',
'authenticity_token':token,
'login':'usernmae',
'password':'password'}
r1 = s.post(url,data=payloda)
print(r1.status_code)
print(r1.text)
print(r1.cookies)

用户名和密码输入自己的github账号

返回内容就不截图了,是登录成功后的首页html代码。可以看到cookie已经拿到了

requests库入门14-Cookie的更多相关文章

  1. requests库入门-16-Session和Cookie

    分类专栏: Python接口自动化测试之requests库入门 作者 | Anthony_tester ,300w+访问量博主,Oracle测试开发工程师. 地址 | https://blog.csd ...

  2. Requests库主要方法解析以及Requests库入门需要掌握的框架

    Requests库主要方法解析以及Requests库入门 1.requests.request(method,url,**kwargs) **kwargs:控制访问的参数,均为可选项 params:字 ...

  3. requests库入门01-环境安装

    最近在项目中写了一个接口自动化测试的脚本,想要写一些文章来一下,方便自己回头来温习,感兴趣的可以跟着看,先写关于requests库的一些基本操作,然后再写整个框架的搭建.使用的是Python3+req ...

  4. Requests库入门

    安装: $ pip install requests Response对象的一些基本属性: Response.status_code 请求的返回状态,正常为200 Response.text 页面的字 ...

  5. 第一天 Requests库入门

    Requests库的get()方法 requests.get(url, params=None, **kwargs) ∙ url : 拟获取页面的url链接 ∙ params : url中的额外参数, ...

  6. requests库入门12-文件上传和下载

    因为找不到可以演示上传接口,所以只能纯代码了 文件上传 上传文件是在请求中使用files参数,files需要指向一个dict,然后dict里面的键是接口中对应文件名的字段,而值就是打开这个文件读取到内 ...

  7. Python 爬虫-Requests库入门

    2017-07-25 10:38:30 response = requests.get(url, params=None, **kwargs) url : 拟获取页面的url链接∙ params :  ...

  8. Python Requests库入门——应用实例-百度、360搜索关键词提交

    百度的关键词接口: http://www.baidu.com/s?wd=keyword 360的关键词接口: http://www.so.com/s?q=keyword keyword就是需要查找的关 ...

  9. requests库入门笔记1

    1.使用requests库发送请求,fiddler无法抓到包:使用浏览器请求相同的url,可以抓到包 在请求参数中添加 proxies参数,如下: proxies = { 'http': 'http: ...

  10. Python爬虫笔记一(来自MOOC) Requests库入门

    Python爬虫笔记一(来自MOOC) 提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行. 课程为:北京理工大学-嵩天-P ...

随机推荐

  1. Hadoop生态圈-开启Ambari的Kerberos安全选项

    Hadoop生态圈-开启Ambari的Kerberos安全选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在完成IPA-Server服务的安装之后,我们已经了解了他提供的基础功 ...

  2. SpringBoot笔记十三:引入webjar资源和国际化处理

    目录 什么是webjar 怎么使用webjar 国际化 新建国际化配置文件 配置配置文件 使用配置文件 我们先来看一个html,带有css的,我们就以这个为准来讲解. 资源可以去我网盘下载 链接:ht ...

  3. C语言复习---找出一个二维数组的鞍点

    前提: 求任意的一个m×n矩阵的鞍点——鞍点是指该位置上的元素在该行上为最大.在该列上为最小, 矩阵中可能没有鞍点,但最多只有一个鞍点. m.n(<=m<=.<=n<=)及矩阵 ...

  4. Linux记录-定时crontab

    /etc/crontab文件和crontab -e命令区别 1.格式不同 分 时 日 月 星期 要运行的命令 第1列分钟1-59 第2列小时1-23(0表示子夜) 第3列日1-31 第4列月1-12 ...

  5. C#设计模式(1)——简单工厂模式

    1.什么是简单工厂 现实中的工厂负责生产产品,顾名思义,编程中的简单工厂就是一个生产对象的类,它的主要作用是创建具体的产品类实例.我们以一个生产鼠标为例来分析简单工厂的作用,鼠标有两种:戴尔鼠标和惠普 ...

  6. 使用JMeter进行一次简单的带json数据的post请求测试,json可配置参数

    配置: 1.新建一个线程组: 然后设置线程数.运行时间.重复次数. 2.新建Http请求: 设置服务器域名,路径,方法,编码格式,数据内容. 可以在函数助手中,编辑所需要的变量,比如本例中的随机生成电 ...

  7. Chrome刷新缓存

    Ctrl+Shift+Del  清除Google浏览器缓存的快捷键  Ctrl+Shift+R  重新加载当前网页而不使用缓存内容

  8. 053、overlay是如何隔离的?(2019-03-20周三)

    参考https://www.cnblogs.com/CloudMan6/p/7341487.html   不同的overlay网络是相互隔离的,我们创建第二个overlay网络 ov_net2 并运行 ...

  9. POI导出Excel 错误THE MAXIMUM COLUMN WIDTH FOR AN INDIVIDUAL CELL IS 255 CHARACTERS

    int orgColWidth = (arrColWidth[column.Ordinal] + 1); if (liekuan > 255) liekuan = 255; //设置列宽 she ...

  10. Baidu地图Map api直接加https不起作用

    这种情况一般出现在v1.1等老版本上,加s=1也不起作用,尽量使用新版本. https://api.map.baidu.com/api?v=2.0&ak=你的密钥&s=1: