cookie有如下特点

  • 保存在客户端,一般由浏览器负责存储在本地。
  • 通常是加密存储的,不过由于存储在本地,很难保证数据不被非法访问,并不怎么安全,所以cookies中不宜保存敏感信息,如密码等。
  • 哪些信息需要保存作为cookie保存在客户端本地,保存多长时间,一般是由服务器决定的,所以HTTP协议中通过服务器返回的响应报文头中,有一个Set-Cookie域来指示浏览器或者其他客户端,在本地保存cookie信息。
  • cookie保存在客户端本地的目的是为了下次访问网站的时候可以直接取出来,上送服务器,所以HTTP协议中通过客户端发送给服务器的请求报文头中,有一个cookies域专门用于存放这个信息,以便客户端将cookie信息发送给服务器。

cookies获取的4中方法

  • 重定向在url上
  • 返回body内容里
  • 返回的头部headers(Set-Cookies)
  • 一般在headers的cookie也可以通过r.cookies获取(Jar格式)

Cookies传到下个请求2中方法

  • 直接用cookies =(参数可以是字典,也可以是Jar)
  • Cookies也可以放headers头部传入

cookies在返回url上

参考案例1:

  1. import requests
  2. import urllib.parse
  3. import urllib3
  4. urllib3.disable_warnings() #,取消警告
  5. url = "https://zzk-s.cnblogs.com/"
  6. r_url = requests.get(url,verify=False)
  7. #通过使用fiddler抓包工具,发现过程是,出现重定向(302),因为没有cookies,导致403,没有权限访问
  8. #过程中发现,403的请求中cookies出现AspxAutoDetectCookieSupport=1,
  9. # 且请求url发生变化,https://zzk-s.cnblogs.com/?AspxAutoDetectCookieSupport=1
  10. #发现cookies的值出现在重新定向请求中?号后面
  11. print(r_url.status_code)
  12. print(r_url.url) # 打印重定向后的请求url
  13. #使用split("?")分割url
  14. #使用urllib.parse.psl将XXX=YYY这样格式的类型转换成列表(元组)形式
  15. #使用dict()将上面的元组转换成cookie可使用的字典形式
  16. cook =dict(urllib.parse.parse_qsl(r_url.url.split("?")[1]))
  17. print("打印出可用的cookie:",cook)
  18. r2 = requests.get(url,cookies =cook,verify = False)
  19. print(r2.url)
  20. print(r2.status_code)
  21. print(r2.content)
  1. """
  2. cookies在返回url上
  3. 参考案例博客园找找看:http://zzk-s.cnblogs.com
  4. """
  5. import requests
  6. from urllib.parse import parse_qsl
  7. #1.访问首页
  8. url = "http://zzk-s.cnblogs.com"
  9. r = requests.get(url,verify=False)
  10. r_302 = (r.url)
  11. #重定向后cookies在url头部http://zzk-s.cnblogs.com/?AspxAutoDetectCookieSupport=1
  12. print(r_302)
  13. #取问号后面的字符作为参数存储
  14. canshu = r_302.split("?")[-1]
  15. #获取cookies,转字典
  16. cook = dict(parse_qsl(canshu))
  17. print(cook) # 结果 {'AspxAutoDetectCookieSupport': '1'}
  18. data ={
  19. "Keywords":"冷枫孤雪"
  20. }
  21. #cookies的传入
  22. r1 = requests.get(url,cookies =cook,params=data)
  23. print(r1.text)
  1. import requests
  2. import re
  3. from urllib.parse import parse_qsl
  4. # 1.先访问首页
  5. url = "http://zzk-s.cnblogs.com/s/blogpost"
  6. r = requests.get(url, allow_redirects=False, verify=False)
  7. # 第2种情况,cookie在重定向页面内容里
  8. print(r.status_code)
  9. print(r.text)
  10. # 正则提取:知道前后取中间,遇到字符加转义
  11. c = re.findall("blogpost\?(.+?)\">",r.text)
  12. cook =dict(parse_qsl(c[0]))
  13. print(cook)
  14. # cookies 传入
  15. data ={
  16. "Keywords":"冷枫孤雪"
  17. }
  18. r1 = requests.get(url,cookies =cook,params=data)
  19. print(r1.text)

cookies的常见方式的更多相关文章

  1. C# DataGridView绑定数据源的几种常见方式

    开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnect ...

  2. jedis操作redis的几种常见方式总结

    Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习 ...

  3. Tomcat 部署项目的几种常见方式

    转自:https://www.cnblogs.com/yuht/p/5714624.html https://www.cnblogs.com/ysocean/p/6893446.html Tomcat ...

  4. 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式

    适用于app.config与web.config的ConfigUtil读写工具类   之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...

  5. 遍历集合的常见方式,排序,用lambda表示是怎样的

       Collection集合的功能:            Object[] toArray() 将集合转成数组            Iterator iterator() 通过方法的调用 获取I ...

  6. 恶意软件开发——shellcode执行的几种常见方式

    一.什么是shellcode? shellcode是一小段代码,用于利用软件漏洞作为有效载荷.它之所以被称为"shellcode",是因为它通常启动一个命令shell,攻击者可以从 ...

  7. C# 实现AOP 的几种常见方式

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获 ...

  8. Azure登陆的两种常见方式(user 和 service principal登陆)

    通过Powershell 登陆Azure(Azure MoonCake为例)一般常见的有两种方式 1. 用户交互式登陆 前提条件:有一个AAD account 此种登陆方式会弹出一个登陆框,让你输入一 ...

  9. ajax异步请求的常见方式

    首先先介绍下ajax,ajax(ASynchronous JavaScript And XML)为异步的javascript和xml.所谓的异步和同步是指: 同步:客户端必须等待服务器的响应,在等待期 ...

随机推荐

  1. 【阅读笔记】《C程序员 从校园到职场》第七章 指针和结构体

    原文地址:让你提前认识软件开发(13):指针及结构体的使用 CSDN博客 https://blog.csdn.net/zhouzhaoxiong1227/article/details/2387299 ...

  2. 虚拟机模拟SSD用于Ceph测试

    一.简单介绍 在一些使用场景中,我们需要使用SSD进行测试,如Ceph的分级,OpenStack多种云硬盘配置.在物理设备受限的情况下,我们可以采用模拟SSD的方式进行 二.SSD的标识 在实际的使用 ...

  3. re模块+面向对象

    re模块 re:其实就是带有特殊语法的字符串 语法:单个字符和多个字符 单个字符: \d是匹配所有的数字 \D是匹配所有的非数字 \s是所有的换行符,制表符,空白等,回车符 \S是所有费换行符,空白和 ...

  4. VBS下载者助以一臂之力

    当拿到shell到手,服务器是内网,你又没有条件映射,服务器又穿不上东西 是不是很郁闷,还有我们还有vbs,能执行cmd命令就有希望 一.VBS下载者: 复制代码 代码如下: Set Post = C ...

  5. 算法复杂度中的O(logN)底数是多少

    前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少.算法中log级别的时间复杂度都是由于使用了分治思想,这 ...

  6. PTA寒假三

    抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C ...

  7. 通过用户名&密码验证访问远程共享文件夹 C#

    通过代码先在cmd中运行net use进行验证,然后就可访问共享文件了. 验证方法如下: public string connectState(string path/*要访问的文件路径*/, str ...

  8. codeforces 338D GCD Table

    什么都不会只能学数论QAQ 英文原题不贴了 题意: 有一张N*M的表格,i行j列的元素是gcd(i,j)读入一个长度为k,元素大小不超过10^12的序列a[1..k],问这个序列是否在表格的某一行中出 ...

  9. 聊聊Java反射

    反射是Java最重要的特性.通过Java反射可以在运行时知道一个类的所有成员和方法,知道一个对象的类类型.成员和方法的所有信息,进而调用对象的方法或生成对象的代理或包装类. Java是面向对象语言,除 ...

  10. 集合总结三(HashMap的实现原理)

    一.概述 二话不说,一上来就点开源码,发现里面有一段介绍如下: Hash table based implementation of the Map interface. This implement ...