因为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. HDFS集群优化篇

    HDFS集群优化篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统级别优化 1>.优化文件系统(推荐使用EXT4和XFS文件系统,相比较而言,更推荐后者,因为XF ...

  2. 《Apache Kafka 实战》读书笔记-认识Apache Kafka

    <Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...

  3. Openldap命令详解

    Openldap 客户端常用管理命令 1.ldapadd -x: 简答认证方式 -W: 不需要在命令上写密码 ldapapp -x -D "cn=Manager,dc=suixingpay, ...

  4. java深copy (伪深copy)【原】

    Teacher.java package test.clone; /** * 老师 * 深copy需要实现Cloneable接口 * @author King * */ public class Te ...

  5. 解决Lost connection to MySQL server during query错误方法

    昨天使用Navicat for MySQL导入MySQL数据库的时候,出现了一个严重的错误,Lost connection to MySQL server during query,字面意思就是在查询 ...

  6. [Android] Android RecycleView和ListView 自定义Adapter封装类

    在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...

  7. Android 全屏设置和禁止横屏竖屏切换

    android:screenOrientation="portrait" #禁止屏幕横竖切换,portrait为纵向,landscape为横向

  8. GCC编译器原理(一)------GCC 工具:addr2line、ar、as、c++filt和elfedit

    1.3 GCC 工具 1.3.1 binutils 工具集 工具 描述 addr2line 给出一个可执行文件的内部地址,addr2line 使用文件中的调试信息将地址翻译成源代码文件名和行号. ar ...

  9. jQuery.extend 函数使用

    JQuery的extend扩展方法:      Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解.      一.Jquery的扩展方 ...

  10. jmeter负载机运行/添加压力机/分布式

    • 我们在压测的时候,可能并发比较大, 一台机子已经启动不了那么多并发了,这个时候我们就要使用多台机子一起来发压力,就要添加压力机,添加压力机怎么添加呢,首先要在做压力机的机子上启动jmeter的代理 ...