微博登录和session恢复过程

2023-11-08

完整源码参考我的pixiv-to-weibo项目,只实现了核心部分,没做容错处理

登录

预登录

这一步是为了获取加密公钥和nonce,因为以前新浪没用HTTPS,必须手动加密。其中用户名编码su算法为BASE64(URI编码(用户名))

    async def _pre_login(self, su):
        async with self._session.get('https://login.sina.com.cn/sso/prelogin.php', params={
   
            'entry':    'weibo',
            'callback': 'sinaSSOController.preloginCallBack',
            'su':       su,
            'rsakt':    'mod',
            'checkpin': '1',
            'client':   'ssologin.js(v1.4.18)'
        }) as r:
            return self.__get_jsonp_response(await r.text())

返回方式是JSONP,有用的是这几个字段:用来加密的公钥pubkey,防止回放攻击的nonceservertime,之后请求要用的rsakv,是否需要验证码showpin,验证码请求要用的pcid

获取验证码

如果预登录返回的数据中showpin为1则需要验证码。获取验证码的请求如下,返回的是验证码图片数据

    async def _input_verif_code(self, pcid):
        async with self._session.get('https://login.sina.com.cn/cgi/pin.php', params={
   
            'r': random.randint(0, 100000000),
            's': '0',
            'p': pcid
        }) as r:
            img_data = await r.read()
        self._show_image(img_data)
        return input('输入验证码:')

登录

密码密文sp计算

sp算法为:转十六进制文本(RSA(servertime + '\t' + nonce + '\n' + 密码)),其中RSA公钥在预登录时返回

    @staticmethod
    def _get_secret_password(password, servertime, nonce, pubkey):
        key = rsa.PublicKey(int(pubkey, 16), 65537)
        res = rsa.encrypt(f'{servertime}\t{nonce}\n{password}'.encode(), key)
        res = binascii.b2a_hex(res)
        return res.decode()

登录请求

登录请求
登录请求如下,这个请求完成后就可以发微博了。很多微博登录的源码都只做到这一步,但是24小时后session会失效,少了后面的步骤则不能恢复session

    async def login(self, username, password):
        su = base64.b64encode(quote_plus(username).encode()).decode()
        data = await self._pre_login(su)

        async with self._session.post('https://login.sina.com.cn/sso/login.php', params={
   
            'client': 'ssologin.js(v1.4.19)',
        }, data
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微博登录和session恢复过程 的相关文章

  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图

随机推荐

  • 使用MyJRebel获取免费的JRebel授权

    在我们开发Java Web程序的时候 调试就是一个麻烦事情 每次更改类 就需要重启服务器 对于Tomcat这样的小巧服务器来说 重启就重启吧 反正也就是几秒钟的事情 如果使用的是完整的Java EE标准服务器 GlassFish这种 重启的
  • 权威分析@RequestParam和@RequestPart 的区别(官方文档)

    一 今天写了两个文件上传的接口用到了 RequestParam和 RequestPart RequestPart 单文件上传 param file param bucket return RequestMapping uploadFile
  • Java50个关键字总结

    作业一 Java基础知识复习 一 关键字总结 1 abstract 修饰类 abstract修饰类 这个类就是抽象类 抽象类中可以有非抽象变量和成员变量 也可以有普通方法 构造方法 但是不能实例化 只能被子类继承 如果子类不是抽象类 则必须
  • python出现invalid syntax什么意思_关于Python出现invalid syntax的几种原因

    原博文 2020 03 19 16 41 1 语法错误 3 X和2 X的语法区别非常大 需要多去了解之后再下手 2 代码缩进问题 这个一般用到工具的情况下可以自动调整 3 我今天也就是傻乎乎的犯了 安装命令是在cmd下直接运行 并不是在py
  • 输入字符串型数字,将字符串型数字转化为整型数字,再将整型数字转化为字符串数字的数组,数字字符串相互转化

    输入字符串型数字 将字符串型数字转化为整型数字 再将整型数字转化为字符串数字的数组 写此函数的原因 很多题目都是对字符串的操作 特别是若能将字符串和数字相互转化 那么解题就会方便很多 直接上代码 有注释 include
  • CreateWindowEx详解

    语法 HWND CreateWindowEx DWORD dwExStyle LPCTSTR lpClassName LPCTSTR lpWindowName DWORD dwStyle int x int y int nWidth int
  • cmd命令查看笔记本电池状况

    1 以管理员身份运行 打开 命令提示符 exe 2 在命令提示符输入 powercfg batteryreport output D battery report html 其中 引号内的电池使用报告文件的保存路径可以自定义 你也可以保存到
  • linux根据进程的运行路径,停止进程

    公式 lsof grep 路径 awk print 2 xargs kill 比如我想停掉目录 home code python program 下的程序 可以使用 lsof grep home code python program aw
  • Python简介与安装

    一 windows下安装python 二 linux下安装python 三 mac系统安装python 四 学会配置不同操作系统的环境变量 windows配置环境变量 linux配置环境变量 五 写一个简单的helloworld小程序 学会
  • Python基于Zmail发送邮件

    目录 一 介绍 二 安装 三 使用须知 四 使用步骤 4 1 获得邮件授权码 以QQ邮箱为例 4 2 发送简单文本邮件 4 3 发送Html文件邮件 4 4 发送文本txt文件邮件 4 4 发送带附件邮件 4 5 验证SMTP和POP功能是
  • 了解GFS和HDFS后,要懂得分布式文件系统设计原理

    转自 https www jianshu com p fc0aa34606ce 一 概述 分布式文件系统是分布式领域的一个基础应用 其中最著名的毫无疑问是 HDFS GFS 如今该领域已经趋向于成熟 但了解它的设计要点和思想 对我们将来面临
  • 伸缩自如的ElasticSearch——通过bboss操作和访问elasticsearch模式

    文章目录 ClientUtil 加载配置文件中的dsl来实现对es的操作模式 所有不依赖dsl的功能 或直接接收dsl模式 基本功能 配置es查询dsl 文档批量创建或者修改 http api 查询dsl动态脚本语法规范 配置springb
  • C++11模板元编程—std::enable_if使用说明

    std enable if 顾名思义 满足条件时类型有效 作为选择类型的小工具 其广泛的应用在 C 的模板元编程中 它的定义也非常的简单 STRUCT TEMPLATE enable if template
  • linux硬盘安装器下载,通过硬盘安装Linux

    一 下载iso文件 下载后的文件可以保存在linux分区或windows分区 iso一般还有个md5sum的说明 用这个可以检验iso文件的正确性 以redhat7 3为例 linux下用 md5sum valhalla i386 disc
  • 接口测试和单元测试

    接口测试的本质 就是通过数据驱动 测试类里面的函数 单元测试的本质 通过代码级别 测试函数 单元测试的框架 unitest 接口 pytest WEB gt 接口 pytest jenkins allure requests 模块讲解和应用
  • 单链表逆转的2种方法。

    单链表逆转方法有很多 这里谈两种 1 再建一个链表然后 边遍历原来的链表 便是用头插法 完成新的单链表 这样子虽然内存损耗比较大 但是也是勉强可以完成的 2 使用3个指针 逐个节点的逆转 p q两个指针分别指向想要逆转关系的两个节点 p指向
  • iOS苹果开发者账号(公司账号)申请流程详解

    前言 近期由于公司项目的需要 全程参与了公司一款iOS原生应用的开发与上线 其中最让我印象深刻的还是申请苹果开发者账号以及app的上架审核 申请苹果开发者账号一波三折 又是邮件又是电话的 审核过程被拒多次 由于苹果审核时间大多是在凌晨或者第
  • JSP介绍

    目录 JSP简介 JSP脚本片段 JSP表达式 JSP声明片段 JSP的指令标识 page的属性 Include指令 Taglib指令 JSP标签 动态引入和静态引入的区别 JSP作用域 JSP的九大内置对象 内置 不需要创建 直接就能用
  • 立即放弃 TypeScript 的 17 个理由

    如果你和我一样 你可能会因为被迫而使用 Typescript 你的公司决定它会成为未来的语言 所以你被迫学习它 起初 您很高兴使用 Typescript 你知道它有很大的潜力 可以帮助你制作更强大的应用程序 但在使用了一段时间后 您开始意识
  • 微博登录和session恢复过程

    微博登录和session恢复过程 登录 预登录 获取验证码 登录 密码密文sp计算 登录请求 跨域广播登录 解决cookie设置不上的问题 跨域广播之后 恢复session 完整源码参考我的pixiv to weibo项目 只实现了核心部分