cookies的常见方式
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:
import requests
import urllib.parse
import urllib3
urllib3.disable_warnings() #,取消警告
url = "https://zzk-s.cnblogs.com/"
r_url = requests.get(url,verify=False)
#通过使用fiddler抓包工具,发现过程是,出现重定向(302),因为没有cookies,导致403,没有权限访问
#过程中发现,403的请求中cookies出现AspxAutoDetectCookieSupport=1,
# 且请求url发生变化,https://zzk-s.cnblogs.com/?AspxAutoDetectCookieSupport=1
#发现cookies的值出现在重新定向请求中?号后面
print(r_url.status_code)
print(r_url.url) # 打印重定向后的请求url
#使用split("?")分割url
#使用urllib.parse.psl将XXX=YYY这样格式的类型转换成列表(元组)形式
#使用dict()将上面的元组转换成cookie可使用的字典形式
cook =dict(urllib.parse.parse_qsl(r_url.url.split("?")[1]))
print("打印出可用的cookie:",cook)
r2 = requests.get(url,cookies =cook,verify = False)
print(r2.url)
print(r2.status_code)
print(r2.content)
"""
cookies在返回url上
参考案例博客园找找看:http://zzk-s.cnblogs.com
"""
import requests
from urllib.parse import parse_qsl
#1.访问首页
url = "http://zzk-s.cnblogs.com"
r = requests.get(url,verify=False)
r_302 = (r.url)
#重定向后cookies在url头部http://zzk-s.cnblogs.com/?AspxAutoDetectCookieSupport=1
print(r_302)
#取问号后面的字符作为参数存储
canshu = r_302.split("?")[-1]
#获取cookies,转字典
cook = dict(parse_qsl(canshu))
print(cook) # 结果 {'AspxAutoDetectCookieSupport': '1'}
data ={
"Keywords":"冷枫孤雪"
}
#cookies的传入
r1 = requests.get(url,cookies =cook,params=data)
print(r1.text)
import requests
import re
from urllib.parse import parse_qsl
# 1.先访问首页
url = "http://zzk-s.cnblogs.com/s/blogpost"
r = requests.get(url, allow_redirects=False, verify=False)
# 第2种情况,cookie在重定向页面内容里
print(r.status_code)
print(r.text)
# 正则提取:知道前后取中间,遇到字符加转义
c = re.findall("blogpost\?(.+?)\">",r.text)
cook =dict(parse_qsl(c[0]))
print(cook)
# cookies 传入
data ={
"Keywords":"冷枫孤雪"
}
r1 = requests.get(url,cookies =cook,params=data)
print(r1.text)
cookies的常见方式的更多相关文章
- C# DataGridView绑定数据源的几种常见方式
开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1. 简单的数据绑定 例1 using (SqlConnection conn = new SqlConnect ...
- jedis操作redis的几种常见方式总结
Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习 ...
- Tomcat 部署项目的几种常见方式
转自:https://www.cnblogs.com/yuht/p/5714624.html https://www.cnblogs.com/ysocean/p/6893446.html Tomcat ...
- 适用于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通用)>,现在重新整理一 ...
- 遍历集合的常见方式,排序,用lambda表示是怎样的
Collection集合的功能: Object[] toArray() 将集合转成数组 Iterator iterator() 通过方法的调用 获取I ...
- 恶意软件开发——shellcode执行的几种常见方式
一.什么是shellcode? shellcode是一小段代码,用于利用软件漏洞作为有效载荷.它之所以被称为"shellcode",是因为它通常启动一个命令shell,攻击者可以从 ...
- C# 实现AOP 的几种常见方式
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获 ...
- Azure登陆的两种常见方式(user 和 service principal登陆)
通过Powershell 登陆Azure(Azure MoonCake为例)一般常见的有两种方式 1. 用户交互式登陆 前提条件:有一个AAD account 此种登陆方式会弹出一个登陆框,让你输入一 ...
- ajax异步请求的常见方式
首先先介绍下ajax,ajax(ASynchronous JavaScript And XML)为异步的javascript和xml.所谓的异步和同步是指: 同步:客户端必须等待服务器的响应,在等待期 ...
随机推荐
- python中字符串格式化
username='小黑'age=18high=1.88s2='欢迎%s,年龄是%d,身高是%.2f'%(username,age,high)#%s是通用的,%d就必须传整数,%f就必须是小数,想保留 ...
- 2.3 利用FTP服务器下载和上传文件
二.利用FTP服务器的下载文件 from ftplib import FTP from os.path import exists def getfile(file,site,dir,user=(), ...
- 第十二次作业 - Beta答辩总结
目录 前言 项目的链接与宣传 项目总结 原计划 达成情况 原因分析 [ Beta 冲刺博客链接汇总] [燃尽图] Beta版本展示 使用说明 视频展示 图片展示 答辩总结 [团队中个人的贡献比例] [ ...
- angularJs绑定select的正确姿势
最近在项目中使用ionic,需要在页面上绑定一个年份下拉框,默认选中当前年,并且在下拉框的change事件中增加一些业务逻辑. 不管是使用ng-repeat还是ng-options,都是各种坑:默认选 ...
- Element分页组件prev-text和next-text属性无效?
前情提要 /(ㄒoㄒ)/~~ 作为刚刚接触 Element 组件的人来说,看文档是第一步,但是当我想要修改分页组件里面的按钮时却遇到了问题. 文档中写到是需要给 prev-text 和 next-te ...
- ES6 用Promise对象实现的 Ajax 操作
下面是一个用Promise对象实现的 Ajax 操作的例子. const getJSON = function(url) { const promise = new Promise(function( ...
- Js/对数组的认识。
1.是对数组的声明: var auditTaskIds = []; 我一般的写法. var auditTaskIds1 = []; 2.向数组中添加元素: auditTaskIds.pu ...
- File类相关操作
1.File类常见方法: 创建: boolean createNewFile():在指定位置创建文件 如果该文件已经存在,则不创建,返回false,和输出流不一样,输出流对象一建立就创立文件,而且文件 ...
- RabbitMQ学习之旅(一)
RabbitMQ学习总结(一) RabbitMQ简介 RabbitMQ是一个消息代理,其接收并转发消息.类似于现实生活中的邮局:你把信件投入邮箱的过程,相当于往队列中添加信息,因为所有邮箱中的信件最终 ...
- i3wm 入门
安装 所用Linux版本为kali-rolling,直接安装 apt install i3 设置为xinit的启动对像 修改 ~/.xserverrc #!/bin/sh exec /usr/bin/ ...