红薯小眼睛接口分析与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.mzph.cn/bicheng/41581.shtml

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

相关文章

04.27 - 05.18_111期_Linux_进程间通信

命名管道通信 特点,写端在没有往管道里面写内容时,读端会处于阻塞状态 共享内存 特点,读端在什么时候都可以进行读操作 ,拷贝次数少,通信次数快 makefile 中使用g进行编译 要实现将上述两个特点进行融合&#xff…

Microsoft Copilot Studio:定制 AI 解决方案的未来

微软最近为其生成式 AI 和大型语言模型工具套件添加了一项创新功能,即 Copilot Studio。这款新产品在 Microsoft Ignite 2023 大会上亮相,将彻底改变组织与 AI 助手的互动方式。 为每个用户提供定制能力 Copilot Studio 是一款出色的用户友好型平台&am…

【面试题】Reactor模型

Reactor模型 定义 Reactor模型是一种事件驱动的设计模式,用于处理服务请求。它通过将事件处理逻辑与事件分发机制解耦,实现高性能、可扩展的并发处理。Reactor模型适用于高并发、事件驱动的程序设计,如网络服务器等。 特点 事件驱动&#…

递归(三)—— 初识暴力递归之“字符串的全部子序列”

题目1 : 打印一个字符串的全部子序列 题目分析: 解法1:非递归方法 我们通过一个实例来理解题意,假设字符串str “abc”,那么它的子序列都有那些呢?" ", “a”, “b”,…

Vue的民族民俗文化分享平台-计算机毕业设计源码22552

基于Vue的民族民俗文化分享平台设计与实现 摘 要 本文介绍了一种基于Vue.js前端框架和Express后端框架的民族民俗文化分享平台的设计和实现。该平台旨在通过线上方式,促进民族民俗文化的传播与分享,增强公众对多元文化的了解和认同。 平台为普通用户提供…

图论·题解1

原题地址 P3371 【模板】单源最短路径(标准版) 注意的点: 边有重复,选择最小边!对于SPFA算法容易出现重大BUG,没有负权值的边时不要使用!!! 70分代码 朴素板dijsktra…

前后端的导入、导出、模板下载等写法

导入,导出、模板下载等的前后端写法 文章目录 导入,导出、模板下载等的前后端写法一、导入实现1.1 后端的导入1.2 前端的导入 二、基础的模板下载2.1 后端的模板下载-若依基础版本2.2 前端的模板下载2.3 后端的模板下载 - 基于资源文件读取2.4 excel制作…

JVM8为什么要增加元空间 ?

持久代 持久代的大小 为什么移除持久代 ? 元空间 元空间的特点: 持久代 持久代中包含了虚拟机中所有可通过反射获取到的数据,比如Class和Method对象。不同的Java虚拟机之间可能会进行类共享,因此持久代又分为只读区和读写区。…

24西安电子科技大学马克思主义学院—考研录取情况

01、马克思主义学院各个方向 02、24马克思主义学院近三年复试分数线对比 PS:马院24年院线相对于23年院线增加15分,反映了大家对于马克思主义理论学习与研究的热情高涨,也彰显了学院在人才培养、学科建设及学术研究等方面的不断进步与成就。 6…

直接更新flowable数据库的流程定义信息的一种方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

文章解读与仿真程序复现思路——太阳能学报EI\CSCD\北大核心《绿电交易场景下计及温控负荷的高铁站两阶段调度策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【第21章】MyBatis-Plus多数据源支持

文章目录 前言一、dynamic-datasource1. 特性2. 约定3. 使用方法3.1 引入依赖3.2 配置数据源3.3 使用 DS 切换数据源 二、mybatis-mate1.特性2.使用方法2.1 配置数据源2.2 使用 Sharding 切换数据源2.3 切换指定数据库节点 三、实战1. 引入库2. 配置3. 使用 DS 切换数据源4. 测…

开关电源详解

一、开关电源的概述 1. 定义与简介 开关电源(Switched-Mode Power Supply,SMPS)是一种通过高频开关器件(如晶体管、MOSFET)进行电能转换的电源装置。与传统的线性电源相比,开关电源具有转换效率高、体积小…

vue项目打包部署后 浏览器自动清除缓存问题(解决方法)

vue打包部署后 浏览器缓存问题,导致控制台报错ChunkLoadError: Loading chunk failed的解决方案 一、报错如下: 每次build打包部署到服务器上时,偶尔会出现前端资源文件不能及时更新到最新,浏览器存在缓存问题,这时在…

Pandas数据可视化详解:大案例解析(第27天)

系列文章目录 Pandas数据可视化解决不显示中文和负号问题matplotlib数据可视化seaborn数据可视化pyecharts数据可视化优衣库数据分析案例 文章目录 系列文章目录前言1. Pandas数据可视化1.1 案例解析:代码实现 2. 解决不显示中文和负号问题3. matplotlib数据可视化…

ListBox自动滚动并限制显示条数

1、实现功能 限制ListBox显示的最大条数; ListBox自动滚动,显示最新行; 2、C#代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using Syst…

JUC并发编程基础(包含线程概念,状态等具体实现)

一.JUC并发编程基础 1. 并行与并发 1.1 并发: 是在同一实体上的多个事件是在一台处理器上"同时处理多个任务"同一时刻,其实是只有一个事件在发生. 即多个线程抢占同一个资源. 1.2 并行 是在不同实体上的多个事件是在多台处理器上同时处理多个任务同一时刻,大家…

【C++】main函数及返回值深度解析

一.main函数介绍 1.main函数怎么写 #include <iostream>int main() {// 程序的代码放在这里std::cout << "Hello, World!" << std::endl;return 0; }在这个例子中&#xff1a; #include <iostream> 是预处理指令&#xff0c;它告诉编译器…

在昇腾服务器上使用llama-factory对baichuan2-13b模型进行lora微调

什么是lora微调 LoRA 提出在预训练模型的参数矩阵上添加低秩分解矩阵来近似每层的参数更新&#xff0c;从而减少适配下游任务所需要训练的参数。 环境准备 这次使用到的微调框架是llama-factory。这个框架集成了对多种模型进行各种训练的代码&#xff0c;少量修改就可使用。 …

小红书矩阵系统源码:赋能内容创作与电商营销的创新工具

在内容驱动的电商时代&#xff0c;小红书凭借其独特的社区氛围和用户基础&#xff0c;成为品牌营销和个人创作者不可忽视的平台。小红书矩阵系统源码&#xff0c;作为支撑这一平台的核心技术&#xff0c;提供了一系列的功能和优势&#xff0c;助力用户在小红书生态中实现更高效…