红薯小眼睛接口分析与Python脚本实现

文章目录

  • 1. 写在前面
  • 2. 接口分析
  • 3. 算法脚本实现

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  作者在之前的文章内有提到关于a1、webid、sec_poison_id这些Cookie组成参数的的讲解及实现算法!以及关键组成参数web_session的获取方式、这个参数之前也提到了分为游客与登录用户,那么用户在访问浏览一篇笔记的时候,一定会触发了某个接口后+1(也就是小眼睛访问量)

2. 接口分析

要实现对小眼睛的+1,首先我们需要深入去研究分析一下它触发了哪个接口。作者这里在非登录的状态下去打开一篇笔记内容,看一下发包请求,如下所示:

在这里插入图片描述

metrics_report这个接口在经过多次的验证与测试下,发现就是让小眼睛+1的接口。也就是说我们去请求一次这个接口那么它就会+1。但是问题来了!基于什么?应该是用户的Cookie信息,也就是当中的web_session

这里我们把请求的参数拿出来分析一下,note_id是笔记的ID、另外注意看user_id有两个,一个自己的一个笔记作者的。如下所示:

json_data = {
    "note_id": "666175a3000000000d00e05e",
    "note_type": 1,
    "report_type": 1,
    "stress_test": False,
    "viewer": {
        "user_id": "6676e1d0000000001c0034e8",
        "followed_author": 0
    },
    "author": {
        "user_id": "65d6ea1d000000000d024df2"
    },
    "interaction": {
        "like": 0,
        "collect": 0,
        "comment": 0,
        "comment_read": 0
    },
    "note": {
        "stay_seconds": 0
    },
    "other": {
        "platform": "web"
    }
}

3. 算法脚本实现

现在需要梳理一下整个+1的流程,将实现流程使用Python代码来实现。首先第一步需要先生成游客的身份信息,通过作者之前文章内的算法实现如下:

# 生成CK的必要组成参数
async def generator_cookie_info(self):
	ck_info = await self.get_core_algorithm()
	return {
	    'a1': ck_info['a1'],
	    'webId': ck_info['webid'],
	    'sec_poison_id': ck_info['sec_poison_id']
	}

上面代码中调用了核心的加密算法函数,主要就是CK组成参数的算法跟签名,如下所示:

# 最新JS算法是作者6.20重新还原的
async def get_core_algorithm(self, is_ck: bool = False, params: str = '') -> Dict[str, str]:
    with open("xs-xsc620.js", encoding='utf-8') as f:
        ctx = execjs.compile(f.read())
    if not is_ck:
        return ctx.call("getwebid")
    else:
        xts = ctx.call('getXs', params, self.cookies['a1'])
        xtscommon = ctx.call('getXsc', xts, self.cookies['a1'])
        self.headers.update({
            'x-s': xts['X-s'],
            'x-s-common': xtscommon,
            'x-t': str(xts['X-t'])
        })

接下来,我们需要拿到服务端给的web_session,通过请求调用login/activate这个接口获取,代码实现如下所示:

async def get_web_session(self):
    login_activate = "/api/sns/web/v1/login/activate"
    self.cookies = await self.generator_cookie_info()
    login_activate_api = f'url={login_activate}' + \
        json.dumps({}).replace(" ", "")
    await self.get_core_algorithm(is_ck=True, params=login_activate_api)
    data = json.dumps({}, separators=(',', ':')).replace(" ", "")
    async with self.session.post(
        f'https://edith.xhs.com{login_activate}',
        cookies=self.cookies,
        headers=self.headers,
        data=data
    ) as response:
        response_data = await response.json()
        logger.info(f'获取web_session信息: {response_data}')
        self.cookies['web_session'] = response_data['data']['session']
        await self.metrics_report()

拿到web_session之后,使用完整的CK信息去请求之前我们提到的小眼睛的metrics_report接口,以此实现+1的效果,运行效果如下所示:

在这里插入图片描述

注意上图!流程就是先通过JS算法签名,去activate的接口拿到服务端返回的session信息,然后拼接JS算法生成的其他Cookie参数字段,访问metrics_report接口

运行脚本之前作者也是截图做了一下保存,以此为标识来记录一下程序的效果,如下所示:

在这里插入图片描述

程序分别使用了不同CK信息对作者自己的笔记进行了测试,测试效果如下所示(+10):

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】进程信号_4

文章目录 八、进程信号3. 信号的处理4. 可重入函数5. volatile 未完待续 八、进程信号 3. 信号的处理 当某个信号的处理函数被调用时,操作系统会自动将当前信号假如进程的信号屏蔽字当中。如果处理完该信号,该信号同样也会自动从信号屏蔽字中 移除。该…

内网通讯软件有哪些?

企业内部内网通讯工具是为了满足企业内部沟通和协作需求而设计的软件工具,其主要特点是在内网环境下进行通讯,以保证安全性和可控性。以下是一些常见的内网通讯软件,在企业内部通讯中起着重要的作用。 1. Microsoft Teams Microsoft Teams是…

【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey

1 介绍 年份:2024 作者:刘子耀,陈晨,南洋理工大学 期刊: 未发表 引用量:6 Liu Z, Ye H, Chen C, et al. Threats, attacks, and defenses in machine unlearning: A survey[J]. arXiv preprint arXiv:2403…

【AI】DeepStream(15):图像分割deepstream-segmentation-test源码分析

【AI】AI学习目录汇总 上一篇:【AI】DeepStream(14):图像分割deepstream-segmentation-test示例演示 1、获取GPU属性 1)获取当前使用的CUDA设备编号 int current_device = -1;cudaGetDevice(&current_device);2)

linux-5.10.110内核源码分析 - Freescale ls1012a pcie host驱动

1、dts pcie设备树 1.1、pcie设备树 pcie1: pcie3400000 {compatible "fsl,ls1012a-pcie";reg <0x00 0x03400000 0x0 0x00100000 /* controller registers */0x40 0x00000000 0x0 0x00002000>; /* configuration space */reg-names "regs", &…

STM32-I2C硬件外设

本博文建议与我上一篇I2C 通信协议​​​​​​共同理解 合成一套关于I2C软硬件体系 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担 特点&#xff1a; 多主机功能&#x…

mac|idea导入通义灵码插件

官方教程&#xff1a;通义灵码下载安装指南_智能编码助手_AI编程_云效(Apsara Devops)-阿里云帮助中心 下载插件&#xff1a; ⇩ TONGYI Lingma - JetBrains 结果如下&#xff1a; 选择apply、ok&#xff0c;会出现弹窗&#xff0c;点击登录 可以实现&#xff1a;生成单元测…

【中项第三版】系统集成项目管理工程师 | 第 9 章 项目管理概论③ | 9.6 - 9.10

前言 第 9 章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节理论性较强&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 9.6 项目管理过程组 9.7 项目管理原则 9.8 项目管理知识领域 9.9 价值交付系统 9.10 本章练习 9.6 项目管理过程组 项目…

2024小学生古诗文大会3个多月备考:吃透真题和知识点(持续)

根据主办方发布的方案通知&#xff0c;2024年上海市小学生古诗文大会的初赛将于10月19日&#xff08;星期六&#xff09;正式开始&#xff0c;还有3个多月的时间。那么该如何有效备考2024年小学生古诗文大会呢&#xff1f;建议围绕真题拓展知识&#xff0c;举一反三。 今天我们…

UE5 视频播放(自动播放和自动清除MediaTexture)

媒体播放器的打开时播放和媒体纹理的自动清除 。 在UE5开发视频播放时&#xff0c;遇到了闪帧的现象。合理选择这两个功能可解决。

掌握 Postman 脚本:入门指南

在探索 API 测试自动化环墁下&#xff0c;Postman 脚本显现其强大功能和灵活性&#xff0c;它不仅仅是 API 测试的工具&#xff0c;更是一个综合性的自动化平台。 Postman 脚本简介 Postman 允许用户在 API 请求生命周期中运行 JavaScript 脚本&#xff0c;这些脚本分为以下三…

Vite: 近几个版本的更新

概述 在 2021 年 2 月&#xff0c;尤大正式推出了 Vite 2.0 版本&#xff0c;可以说是 Vite 的一个重要转折点&#xff0c;自此之后 Vite 的用户量发生了非常迅速的增长&#xff0c;很快达到了每周 100 万的 npm 下载量。同时&#xff0c;Vite 的社区也越来越活跃&#xff0c;…

JAVA基础知识(下)

一、String相关面试题 1. 为什么 String 在 java 中是不可变的? - 如果不是不可变的&#xff1a;这种情况根本不可能&#xff0c;因为在字符串池的情况下&#xff0c;一个字符串对象/文字&#xff0c;例如 “Test” 已被许多参考变量引用&#xff0c; 因此如果其中任何一个更…

UCOS-III 任务同步机制-信号量

1. 信号量类型 1.1 二值信号量&#xff08;Binary Semaphores&#xff09; 二值信号量只有两个状态&#xff1a;可用&#xff08;1&#xff09;和不可用&#xff08;0&#xff09;。它主要用于任务之间的互斥访问或者事件通知。例如&#xff0c;当一个任务完成某个操作后&am…

进程、程序、应用程序之间的关系

文章目录 进程和程序进程和应用程序总结参考资料 进程和程序 程序&#xff1a;程序是存放在硬盘中的可执行文件&#xff0c;主要包括代码指令和数据。程序本身是一个静态的文件&#xff0c;只有在被操作系统加载到内存中并执行时才会变成进程。 进程&#xff1a;进程是程序在…

QoS-基于queue-profile部署流量整形

拓扑图 配置 完成前面的配置QoS-基于queue-profile拥塞避免-CSDN博客 为查看实验效果&#xff0c;cir设置为1KB qos queue-profile queue_pro1queue 0 gts cir 8 # 在AR1上ping 3.3.3.3&#xff0c;10个包&#xff0c;大小600字节&#xff0c;间隔0.1s AR2查看丢弃情况&…

redis 如何使用 scan, go语言

建议用方案乙 文章目录 场景方案方案甲方案乙 拓展 场景 redis 中存在大量 key。 其中有一部分是用户登陆的 session_id&#xff0c; 结构是 &#xff1a; session_id:1session_id:2session_id:3需求&#xff1a; 有多少用户在线 方案 方案甲 keys session_id:*这种方式简…

白牌产品的数字化品牌蜕变之路

​在如今这个竞争白热化的市场中&#xff0c;品牌就是企业克敌制胜的法宝。而白牌产品&#xff0c;因缺少响亮的品牌名号和独特的品牌形象&#xff0c;常常在市场的角逐中处于下风。 不过&#xff0c;数字化时代的来临&#xff0c;却为白牌产品带来了新的曙光&#xff01; 蚓链…

学习笔记——动态路由——OSPF链路状态通告(LSA)

十、OSPF链路状态通告(LSA) 1、链路状态通告简介 (1)LAS概述 链路状态通告(Link State Advertisement&#xff0c;LSA)是路由器之间链路状态信息的载体。LSA是LSDB的最小组成单位&#xff0c;LSDB由一条条LSA构成的。是OSPF中计算路由的重要依据。 LSA用于向其它邻接OSPF路…

# Sharding-JDBC从入门到精通(6)-- Sharding-JDBC 水平分库 和 垂直分库。

Sharding-JDBC从入门到精通&#xff08;6&#xff09;-- Sharding-JDBC 水平分库 和 垂直分库。 一、Sharding-JDBC 水平分库-分片策略配置 1、分库策略定义方式如下 # 分库策略&#xff0c;如何将一个逻辑表映射到多个数据源 spring.shardingsphere.sharding.tables.<逻…