因为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. Java Hibernate中的悲观锁和乐观锁的实现

    锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种, ...

  2. Ubuntu 下使用 putty并通过 ch340 usb 串口线进行调试

    安装putty sudo apt-get install putty -y 插入usb转串口线 由于linux下没有Windos类似的设备管理器,所以我们可以通过其他方法获取对应的串口号 可以在插拔之 ...

  3. Linux下Maven私服Nexus3.x环境构建操作记录【转】

    Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...

  4. freemarker写入word【未完,待续】

    . java基于feemarker 生成word文档

  5. HDU 1038(速度里程计算 **)

    题意是已知车轮的直径,圈数和时间,求所行驶的里程和速度. 单位换算,代码如下: #include <bits/stdc++.h> using namespace std; const do ...

  6. SpringBoot系列: 与Spring Rest服务交互数据

    不管是单体应用还是微服务应用, 现在都流行Restful风格,  下图是一个比较典型的使用rest的应用架构, 该应用不仅使用database数据源, 而且用到了一个Weather微服务, 另一方面, ...

  7. AAndroid Studio的\drawable还是mipmap

    图片应该放在drawable文件夹下,而mipmap文件夹只适合放app icons

  8. exec存储过程示例

    假如存储过程为test,两个参数为aa,bb那么有以下两种写法,不要带括号EXEC [dbo].[test] @aa = 111, @bb = 222 exec test 111,222

  9. [译]Debug ASP.NET Core 2.0源代码

    原文 首先你的VS必须为VS 2017 15.3或以上版本. 打开你的Startup类,在ConfigureServices方法上设置个断点,按F5 Debug应用. 在Call Stack(调用堆栈 ...

  10. RIPS PHP源码静态分析(转)

    0x00背景 对于PHP代码审计的需求,我们当然需要一款好的php代码审计分析工具--RIPS,它使用了静态分析技术,能够自动化地挖掘PHP源代码潜在的安全漏洞如XSS ,sql注入,敏感信息泄漏,文 ...