【Python】request.session的cookie如何导入aiohttp._cookie_jar

news2025/2/22 13:19:52

request.session的cookie导入aiohttp._cookie_jar的教程

1.起因

我的 kook-valorant-bot 使用了两个开源库,用于riot账户的登录并获取token

  • 其中最主要用的是基于aiohttp的floxay/python-riot-auth,但这个仓库不支持2fa用户(开启了邮箱双重验证的用户)作者去年就说会写上,但是他比较忙没有排期;
  • 于是我又去找了一个另外一个基于request的Prodzify/Riot-auth 支持2fa登录的,半月前已经给bot加上了这个缺失半年的功能。

可是 Prodzify/Riot-auth 没有写cookie登录方法,其每次登录都需要账户密码,2fa用户每次都需要提供邮箱验证码;对于一个bot来说,每次操作这么麻烦,很是难受!

随后,我去询问了写discord valorant bot的作者,得知如果2fa用户使用cookie登录,其是不需要提供邮箱验证码的!

那么问题就变成了,如何将 request的cookie导入到aiohttp的_cookie_jar中,然后调用floxay/python-riot-auth已经写好的cookie登录方法呢?


1.1 前置声明

这里说明一下,我写bot全都是看khl.py的example自学的,到目前为止,我没有系统性的学习过python语法,关于py类和对象的知识全都得靠C++的存货来旁敲侧击;所以如果我的python博客中出现错误,那是很正常的,还请指正!

QQ图片20220504145105

2.查找办法

不多比比在互联网上大海捞针的困难了,我还是东平西凑才找到了一个办法

Python CookieJar.update_cookies方法代碼示例

该教程提到了下面的办法来导入cookie

# 需要導入模塊: from aiohttp import CookieJar [as 別名]
# 或者: from aiohttp.CookieJar import update_cookies [as 別名]
def test_domain_filter_ip_cookie_send(loop) -> None:
    jar = CookieJar(loop=loop)
    cookies = SimpleCookie(
        "shared-cookie=first; "
        "domain-cookie=second; Domain=example.com; "
        "subdomain1-cookie=third; Domain=test1.example.com; "
        "subdomain2-cookie=fourth; Domain=test2.example.com; "
        "dotted-domain-cookie=fifth; Domain=.example.com; "
        "different-domain-cookie=sixth; Domain=different.org; "
        "secure-cookie=seventh; Domain=secure.com; Secure; "
        "no-path-cookie=eighth; Domain=pathtest.com; "
        "path1-cookie=nineth; Domain=pathtest.com; Path=/; "
        "path2-cookie=tenth; Domain=pathtest.com; Path=/one; "
        "path3-cookie=eleventh; Domain=pathtest.com; Path=/one/two; "
        "path4-cookie=twelfth; Domain=pathtest.com; Path=/one/two/; "
        "expires-cookie=thirteenth; Domain=expirestest.com; Path=/;"
        " Expires=Tue, 1 Jan 1980 12:00:00 GMT; "
        "max-age-cookie=fourteenth; Domain=maxagetest.com; Path=/;"
        " Max-Age=60; "
        "invalid-max-age-cookie=fifteenth; Domain=invalid-values.com; "
        " Max-Age=string; "
        "invalid-expires-cookie=sixteenth; Domain=invalid-values.com; "
        " Expires=string;"
    )

    jar.update_cookies(cookies)
    cookies_sent = jar.filter_cookies(URL("http://1.2.3.4/")).output(
        header='Cookie:')
    assert cookies_sent == 'Cookie: shared-cookie=first'

floxay/python-riot-auth 里正好封装了cookie jar,也就是说,我们只要想办法弄出来一个 SimpleCookie 对象,再调用 update_cookie 方法,就大功告成了!

3.最终实现

关于这两个登录项目的源码,请去github仓库查看

下面只对cookie部分进行说明!

3.1 request和aiohttp的cookies差异

因为cookie部分涉及到riot账户的登录信息,所以必须打码

首先当然是从request里面拿到cookie了

self.cookie = self.session.cookies
print(self.cookie)

这里直接打印,获取到的内容如下

image-20230115221654861

而aiohttp的cookie打印出来是下面这样的

auth = riot_auth.RiotAuth("账户","密码")
print(auth._cookie_jar._cookies)

image-20230115221720971

可以看到,两个库打印的内容不太相同,但是其键值是一致的,我们只需要把request的键值导入到SimpleCookie里面就可以了

3.2 request.session的cookie导出为dict

要想导入到SimpleCookie里面,我们可以先来看看这个类的构造是什么

image-20230115223356199

可以看到,该类其实是支持用dict来初始化的

现在问题又变成了,如何将request.session的cookie导出为dict

百度一下,这个问题的答案还是能找得到的

au = Auth(username="账户",password="密码")
ck_dict = requests.utils.dict_from_cookiejar( au.cookie )
print(ck_dict)

此时打印出来的结果如下,成功转换成了dict

image-20230115223628589

再把这个dict丢进SimpleCookie,运行无报错,那么说明ojbk了

3.3 最终实现

现在就只需要进行如下的操作,就能实现把2fa用户的cookie导入到riot_auth.RiotAuth()里面了!

import asyncio

if __name__ == '__main__':
    print(f"Start")
    au = Auth(username="账户",password="密码")
    ck_dict = requests.utils.dict_from_cookiejar( au.cookie )
    print(ck_dict)
    scookie = SimpleCookie(ck_dict)
    auth = riot_auth.RiotAuth()
    auth._cookie_jar._cookies
    auth._cookie_jar.update_cookies(scookie)
    ret = asyncio.run(auth.reauthorize())
    print(ret) #成功!!!!

auth.reauthorize()方法会返回一个bool值,标识是否登录成功

image-20230115223844572

当然成功啦!

4.结语

不得不说,这个问题的答案网上是真的无现成的,都得东平西凑,花了我差不多一个半小时才找到正确方法

不过现在终于可以保存2fa用户的登录信息了,也算是bot的功能升级吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1999—2019年地级市人口变动数据(增长率\出生人口\死亡人口)

人口数据是我们在各项研究中最常使用的数据,而统计年鉴是人口数据的重要来源!之前我们介绍过基于2000-2021年《中国城市统计年鉴》整理的1999年—2020年全国地级市的人口指标,包括户籍人口、常住人口、户数等指标(可查看之前发布的…

史上最强strace命令详解

系列文章目录 文章目录系列文章目录前言一、strace是什么?二、strace怎么用总结前言 一、strace是什么? 按照 strace 官网的描述,strace 是一个可用于诊断、调试和教学的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互&…

网络编程 -- socket 套接字

文章目录socket 套接字UDP 和 TCP 区别1. 有连接 VS 无连接2. 可靠传输 VS 不可靠传输3. 面向字节流 VS 面向数据报4. 全双工UDP 数据报套接字编程TCP 数据报套接字编程socket 套接字 本文就来学习一下 网络编程, 既然谈到了网络编程,那么要如何进行呢 &…

三层交换机报文转发过程

如图所示,假如主机A想访问主机B,首先主机A会将自己的IP地址和子网掩码做与操作,得出网路地址(如:Host-A的IP地址100.1.1.2与自身掩码255.255.255.0做与操作后,得到的网络号是100.1.1.0).然后判断目的IP地址(即Host-B的IP地址)与自己的网络地址是不是在同…

Linux下查看多线程进程下的线程

Linux内核在执行程序时,将所有运行时信息写到了/proc/{pid} 目录下。下面我们以以下python的2线程程序为例,详细说一下Linux系统下如何查看1,某个进程有几个线程2,某个进程里具体有哪些线程我们通过如下代码(threaddem…

1606_PC汇编语言_简介以及8086系列的平台信息梳理

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 看得出来外国高校教育中的质量,一个课程涉及到的资料特别庞大。我感觉掌握起来比较缓慢吃力,当然,这不排除语音障碍带来的影响。…

【选择IT培训机构时,我们应该注意的点有哪些?】

之前写过一篇关于是否还有靠谱IT培训机构的内容,很多小伙伴也发表了各自不同的看法,有赞同,有反对,还有讽刺的。其中不免有培训的受害者,想要培训的人,恶意抹黑培训的人,也有少部分培训的受益者…

jenkins docker 部署-02

镜像说明 镜像ponylee/jenkins-centos7:v2.0基于镜像ponylee/jenkins-centos7:v1.0(镜像ponylee/jenkins-centos7:v1.0基于jenkins/jenkins:lts-centos7-jdk8, 添加 git maven jdk8 等java部署常用的工具。同时改变运行用户jenkins为root,放大权限&#…

【GD32F427开发板试用】基于GD32F427的纳姆轮小车

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:Ljfly 目标: 做一个四轮驱动小车,实现通过GD32F427控制小车前进,后退,左移,右移&a…

一起自学SLAM算法:12.1 ros-navigation导航系统

连载文章,长期更新,欢迎关注: 可以说ros-navigation是ROS系统中最重要的组件之一,绝大部分自主移动机器人的导航功能都是基于ros-navigation导航系统实现的。下面将从原理分析、源码解读和安装与运行这3个方面展开讲解ros-navigat…

一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (一)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

拉伯证券|2023年净利“超十倍潜力股”揭秘

本年成绩有望暴增的个股有哪些? 2022年各首要指数调整较大,但2023年开年以来A股体现继续强势,三大股指到目前涨幅均超5%,创业板指更是大涨超10%,医药、消费、科技等赛道轮番体现。 外资也对A股进行新一轮的加仓调仓&a…

Redis学习笔记:慢查询,Pipeline,事务,乐观锁

本文是自己的学习笔记。主要参考资料如下: 马士兵 1、Redis的慢查询1.1、慢查询的相关参数1.1.1、设置阈值1.1.2、慢查询日志存储长度1.1.2.1、慢查询日志解析1.2、生产环境下慢查询的配置2、Pipeline2.1、简单的pipeline代码示例2.2、使用Pipeline的注意事项3、事务…

自己写的功能简单的 http server 文件下载服务器 http服务器

最近在项目中遇到过 通过ssh登录到某台机器A ,然后 又从A机器上ssh到机器B 而B机器是没有外网功能,这个时候如果想从B机器上传文件到A机器上就很不好办了 由于B机器没有外网 很多工具软件都没有 原来是是用python 起的http服务器 但是B机器没有安装py…

Black Basta 勒索软件利用 QakBot 进行分发

自 2022 年 4 月投入运营以来,Black Basta 对全球近 50 家组织发起了攻击。攻击者使用了“双重勒索”策略,如果受害者不交付赎金就会被公开数据。 勒索团伙会不断改进攻击方式,最近研究人员发现 Black Basta 与银行木马 QakBot 勾结在一起&a…

nginx+uwsgi部署django项目

1. python3.9环境安装 安装依赖 yum install zlib zlib-devel libffi-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make wget下载源码 官网地址 wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz解压 &…

maven的下载与安装

前言 本篇文章是基于win11系统下载安装Maven的教程。 一、 Maven介绍 1. 什么是Maven? Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管…

【FreeRTOS】详细讲解FreeRTOS中任务管理并通过示例讲述其用法

任务状态 在FreeRTOS中一个任务经创建后会有多个状态,通常可分为以下几种状态: 就绪态:新创建的任务一般处于就绪态。处于就绪态的任务表明其已经存在于就绪列表中,其已经具备所有的任务执行需要条件,只等待调度器调度…

社科院杜兰大学金融管理硕士项目——美丽的风景,在你前行的路上

一个人的强大源于内心的坚定,内心强大的人,是平和的、自信的、乐观的。在工作中也是奋发图强、积极向上的,就像选择来社科院与杜兰大学金融管理硕士充电,为职场发展注入能量,为未来发展奠定基础。近些年来,…

Centos7离线安装MySQL

使用tar.gz文件安装MySQL 1、下载MySQL离线包 下载地址:https://downloads.mysql.com/archives/community/ 根据需要下载对应版本tar.gz文件,下载完成后上传到服务器 2、解压tar.gz文件 tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz等待解…