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的常见方式的更多相关文章

  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. MVC跨域API

    API using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Ne ...

  2. .net 表达式返回值和等号赋值的区别

    .net 7.0的新特性中,有一个使用表达式体返回值的操作.请看如下代码: private string _userName=""; public string UserName{ ...

  3. Jsの数组练习-求一组数中的最大值和最小值,以及所在位置

    要求:求一组数中的最大值和最小值,以及所在位置 代码实现: <!DOCTYPE html> <html lang="en"> <head> &l ...

  4. java中的线程问题(一)什么是线程。

    线程--什么是进程 进程--概念 要解释线程,就必须明白什么是进程. 什么是进程呢? 进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进 ...

  5. linux下的$0-n作用

    电面的时候回答上来一部分了....呵呵......总结一下!!! $0 Shell本身的文件名 $1-$n 添加到Shell的各参数值.$1是第1参数.$2是第2参数… $$ Shell本身的PID( ...

  6. Fiddler中session请求/响应类型与图标含义

    近期在看fiddler抓包工具,发现前面都会有小图标显示,不同的图标代表了不同的含义,通过查询,整理如下:  请求发送到服务器  从服务器下载响应结果  请求在断点处被暂停  响应在断点处被暂停  请 ...

  7. 周强201771010141《面向对象程序设计(java)》第一周学习总结

    周强201771010141<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com ...

  8. Js高级 事件 对象

    1.事件 浏览器客户端上客户触发的行为都成为事件 所有的事件都是天生自带的,不需要我们我去绑定,只需要我们去触发. 通过obj.事件名=function(){} 事件名:onmouseover onm ...

  9. 《Linux内核原理与分析》第五周作业

    课本:第4章 系统调用的三层机制(上) -用户态.内核态和中断 -用户态:在低的执行级别下,代码能够掌控的范围有所限制,只能访问部分内存. -内核态:在高的执行级别下,代码可以执行特权指令,访问任意的 ...

  10. Python基础:一、编程语言分类

    编程语言主要从以下几个角度进行分类: 编译型和解释型 静态语言和动态语言 强类型语言和弱类型语言 编译型语言和解释型语言 编译和解释的区别是什么? 编译器是把源程序的每一条语句都编译成机器语言,并保存 ...