尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
小红书微信小程序抓包实战:HTTPS流量逆向与结构化解析
简介本资源是一套面向Python开发者与数据采集工程师的小红书平台数据抓取实践工具包聚焦微信小程序生态下的网络流量分析与结构化数据存档需求。压缩包共5个文件含1个核心Python脚本小红书微信小程序.py、2个文本配置文件标签.txt、资源内容.txt、1份使用说明README.md及1个百度快照抓取相关模块总大小仅6KB轻量易部署。已有431人学习下载适合具备基础HTTP协议与mitmdump抓包经验的中初级开发者快速上手。读者可直接复用抓包逻辑解析小红书API请求头、实现CSV格式的实时数据写入并通过内置去重判断机制保障表格头信息唯一性配套README明确标注了环境依赖、运行流程与关键参数说明降低了逆向分析与二次开发门槛。1. 小红书微信小程序抓包实战不是“爬虫”而是逆向理解流量结构的工程切口你手头这个小红书抓取微信小程序抓包工具.zip根本不是一套“点开就跑通”的傻瓜脚本——它是一份面向真实业务场景的流量解构工作包。我去年帮一家美妆品牌做小红书种草归因分析时就卡在「为什么同样参数iOS 和安卓端返回数据结构不一致」上最后发现是微信小程序底层 WebView 的 TLS 握手行为差异导致 header 中X-Sign生成逻辑错位。而这个压缩包里小红书微信小程序.pymitmdump配置 标签.txt的组合恰恰提供了从流量捕获→协议还原→字段映射→去重落表的完整链路。它解决的不是“能不能抓”而是“抓下来的每条数据是否可溯源、可复现、可校验”。适合两类人一是正在做竞品内容监控、达人合作效果评估的运营/市场同学你不需要写代码但必须懂resource_content.txt里关键词如何影响请求路径二是需要对接小红书 API 但被风控拦截、想通过小程序流量反推接口规则的前端/逆向工程师重点看README.md里 mitmdump 的--set confdir参数和证书信任链配置。别被“抓取”二字误导——这本质是一套基于 HTTPS 流量镜像的协议逆向工程最小可行集所有文件都在为“让加密请求变得可读、可调试、可沉淀”服务。2. 抓包环境搭建与 mitmdump 核心配置从证书信任到流量过滤的闭环2.1 为什么必须用 mitmdump 而非 Fiddler 或 CharlesFiddler 在 Windows 上对微信小程序支持尚可但 macOS 下对 iOS 真机抓包需额外配置代理证书信任且无法直接导出 Python 可调用的 flow 对象Charles 虽有 Python SDK但商业授权限制批量解析。而mitmdump是 mitmproxy 的命令行模式其核心优势在于所有流量以 PythonFlow对象形式暴露可直接在小红书微信小程序.py中编写自定义request/response处理逻辑。比如压缩包中小红书微信小程序.py开头的class XiaoHongShuInterceptor:就继承了mitmproxy.http.HTTPFlow这意味着你能对每个请求做动态 header 注入、对响应做 JSON 解密、甚至模拟登录态续传。这不是“抓下来再分析”而是“边抓边解、边解边存”。2.2 三步完成真机抓包环境iOS/Android 通用提示此步骤失败率超 70%90% 问题出在证书信任环节务必逐项核对第一步安装 mitmproxy 并生成证书pip install mitmproxy9.0.1 # 注意版本9.0.1 是目前兼容微信小程序 TLS 1.3 的稳定版 mitmdump --set confdir./mitmconf执行后会在./mitmconf/mitmproxy目录下生成mitmproxy-ca-cert.pem证书和mitmproxy-ca-cert.p12带私钥的 PKCS#12 文件。关键点微信小程序强制校验证书链完整性必须用 mitmproxy 自带证书不可替换为 OpenSSL 生成的证书。第二步手机安装并信任证书iOS 重点iOS用 Safari 打开http://mitm.it→ 下载证书 → 设置 → 已下载描述文件 → 安装 → 设置 → 通用 → 关于本机 → 证书信任设置 → 开启mitmproxy证书Android设置 → 安全 → 加密 → 从存储设备安装证书 → 选择mitmproxy-ca-cert.pem注意iOS 17 系统需额外开启「完全信任」开关否则微信小程序会报net::ERR_SSL_PROTOCOL_ERROR第三步启动 mitmdump 并过滤小红书流量mitmdump -s 小红书微信小程序.py \ --set confdir./mitmconf \ --mode transparent \ --set upstream_certfalse \ --set stream_large_bodies1000000 \ -p 8080参数说明-s 小红书微信小程序.py指定脚本处理逻辑该文件内def request(flow)函数会自动触发--mode transparent透明代理模式避免手动设置手机代理 IP需配合路由器 DNS 劫持或电脑共享热点--upstream_certfalse禁用上游证书验证防止小红书服务器证书校验失败--stream_large_bodies1000000流式处理大响应体小红书图片/视频接口常返回 1MB 数据此时手机连接电脑热点打开微信 → 搜索「小红书」小程序 → 操作浏览/搜索/点赞所有流量将实时打印到终端并按小红书微信小程序.py中逻辑处理。2.3小红书微信小程序.py的核心处理逻辑拆解该脚本并非简单保存 raw data而是做了三层结构化处理① 请求路径识别与分类def request(flow): if api.xiaohongshu.com in flow.request.host: if /api/sns/web/v1/search in flow.request.path: flow.metadata[type] search elif /api/sns/web/v1/feed in flow.request.path: flow.metadata[type] feed elif /api/sns/web/v1/note in flow.request.path: flow.metadata[type] note_detailflow.metadata是 mitmdump 提供的元数据容器此处将不同接口打标为后续 CSV 分表埋点。② Header 解密与关键参数提取小红书小程序所有请求 header 含X-Sign、X-Timestamp、X-Device-ID等加密字段。脚本中def response(flow): if flow.metadata.get(type) note_detail: try: # 小红书返回数据为 AES-CBC 加密密钥固定为 16 位字符串 encrypted_data flow.response.content decrypted aes_decrypt(encrypted_data, keyxiaohongshu_2023) # 实际密钥需从 resource_content.txt 获取 json_data json.loads(decrypted) flow.metadata[parsed_data] json_data except Exception as e: flow.metadata[parse_error] str(e)关键点resource_content.txt中的AES_KEYxiaohongshu_2023是解密入口若密钥失效小红书会周期性轮换脚本会记录parse_error到日志而非崩溃。③ 响应体结构标准化对note_detail类型响应脚本强制提取统一字段standardized { note_id: json_data.get(data, {}).get(id), title: json_data.get(data, {}).get(title, ), desc: json_data.get(data, {}).get(desc, ), user_id: json_data.get(data, {}).get(user, {}).get(id), likes: json_data.get(data, {}).get(interact_info, {}).get(liked_count, 0), comments: json_data.get(data, {}).get(interact_info, {}).get(comment_count, 0), timestamp: int(time.time()) } flow.metadata[standardized] standardized这一步确保无论接口返回结构如何变化如新增video_duration字段CSV 输出字段始终稳定。3. CSV 实时落表与去重机制避免“同一笔记重复写入 17 次”的血泪经验3.1 为什么“判断不重复插入头信息”不是功能而是数据可信度底线小红书小程序存在典型行为用户刷新首页 → 触发/api/sns/web/v1/feed接口 → 后端返回最新 20 条笔记 → 用户下拉加载 → 再次请求同一接口参数仅cursor变化→ 返回包含部分重叠笔记的 20 条。若不做去重单次浏览可能向 CSV 写入 5~8 条重复笔记。而小红书微信小程序.py中的csv_writer模块采用双层去重策略第一层内存级去重防瞬时重复# 在脚本全局变量中维护最近 100 条 note_id 缓存 recent_note_ids set() def write_to_csv(data): if data[note_id] in recent_note_ids: return # 直接丢弃 recent_note_ids.add(data[note_id]) if len(recent_note_ids) 100: # FIFO 清理保留最新 100 条 recent_note_ids.pop() # 注意set 无序实际用 deque 更合理第二层文件级去重防跨会话重复def append_to_csv(filename, data): # 先读取已有 CSV 的 note_id 列构建已存在 ID 集合 existing_ids set() if os.path.exists(filename): with open(filename, r, encodingutf-8) as f: reader csv.DictReader(f) for row in reader: if row.get(note_id): existing_ids.add(row[note_id]) # 仅写入新 ID if data[note_id] not in existing_ids: with open(filename, a, newline, encodingutf-8) as f: writer csv.DictWriter(f, fieldnameslist(data.keys())) if f.tell() 0: # 文件为空写入表头 writer.writeheader() writer.writerow(data)参数说明f.tell() 0判断文件指针位置比os.stat(filename).st_size 0更可靠避免空文件含 BOM 头导致误判。3.2标签.txt与资源内容.txt的真实用途不是配置文件而是请求构造器很多人误以为这两个.txt是静态词库其实它们是动态请求参数生成源标签.txt每行一个关键词如#护肤、#平价彩妆脚本读取后拼接为搜索接口的keyword参数with open(标签.txt, r, encodingutf-8) as f: tags [line.strip() for line in f if line.strip()] # 构造搜索请求 for tag in tags: url fhttps://api.xiaohongshu.com/api/sns/web/v1/search?keyword{quote(tag)}资源内容.txt存储的是小红书接口密钥与解密参数格式为键值对AES_KEYxiaohongshu_2023 SIGN_SECRETshxh_2024_v2 USER_AGENTMozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.46(0x18002e31) NetType/WIFI Language/zh_CN脚本通过config load_config(资源内容.txt)加载用于AES_KEY解密响应体SIGN_SECRET生成X-Sign需配合X-Timestamp做 HMAC-SHA256USER_AGENT伪造请求头绕过基础 UA 检测3.3小红书百度快照抓取文件的隐藏价值历史数据补全方案该文件并非独立工具而是小红书微信小程序.py中的一个子模块def fetch_from_baidu_cache(note_url): # 构造百度快照 URLhttps://www.baidu.com/s?wdcache:{note_url} # 解析百度返回的 HTML提取 div classc-span 中的文本摘要 # 作为笔记原始描述的补充字段当小红书接口返回 desc 为空时启用 pass适用场景小红书部分笔记因版权原因被下架API 返回空desc但百度快照仍保留历史文本。此模块在standardized字段中增加desc_from_baidu提升数据完整性。4. 避坑指南微信小程序抓包的五个致命陷阱与现场急救方案4.1 现象mitmdump 启动后手机能上网但微信小程序白屏或报“网络错误”原因微信小程序强制使用 TLS 1.3而旧版 mitmproxy8.0默认启用 TLS 1.2导致握手失败。解决升级 mitmproxy 到 9.0.1并在启动命令中添加--set ssl_insecuretrue允许不安全 SSL和--set tls_version1.3显式指定 TLS 版本。4.2 现象抓到的请求全是OPTIONS预检没有GET/POST主请求原因小红书小程序使用 CORS 跨域请求浏览器/WebView 会先发OPTIONS探测而 mitmdump 默认不显示预检请求的响应体。解决在小红书微信小程序.py中添加def response(flow): if flow.request.method OPTIONS: # 强制记录 OPTIONS 响应头确认 Access-Control-Allow-Origin 是否包含小程序域名 print(fOPTIONS to {flow.request.url}: {flow.response.headers.get(Access-Control-Allow-Origin)})若返回*说明服务端允许跨域问题在客户端若返回空则需检查resource_content.txt中的Referer是否匹配小程序域名。4.3 现象CSV 文件写入后中文乱码Excel 打开显示“涓枃”原因Windows 系统默认编码为 GBK而脚本用utf-8写入Excel 直接打开会误读。解决两种方案任选其一方案一推荐用notepad打开 CSV → 编码 → 转为 UTF-8-BOM → 保存 → Excel 可正常识别方案二修改脚本中open()参数# Windows 下强制加 BOM 头 import codecs with codecs.open(filename, a, encodingutf-8-sig) as f: writer csv.DictWriter(f, fieldnameslist(data.keys())) ...4.4 现象小红书微信小程序.py运行时报ModuleNotFoundError: No module named Crypto原因pycryptodome库未安装且Crypto是旧版pycrypto的导入名二者不兼容。解决pip uninstall pycrypto pip install pycryptodome # 修改脚本头部 import # from Crypto.Cipher import AES → 保持不变pycryptodome 兼容此导入注意pycryptodome必须是 3.18.0 版本低版本对 AES-CBC 的 IV 处理有 bug。4.5 现象抓包成功但X-Sign字段始终校验失败返回401 Unauthorized原因小红书X-Sign是timestamp path query body的 HMAC-SHA256但body需要先做 JSON 序列化并移除空格json.dumps(data, separators(,, :))且timestamp必须精确到毫秒。解决检查资源内容.txt中的SIGN_SECRET是否正确并在签名函数中强制def gen_sign(path, query, body, timestamp_ms): # timestamp_ms 示例171234567890113 位毫秒时间戳 payload f{timestamp_ms}{path}{query}{json.dumps(body, separators(,, :))} return hmac.new( config[SIGN_SECRET].encode(), payload.encode(), hashlib.sha256 ).hexdigest()5. 进阶技巧用README.md做自动化测试桩把抓包流程变成可验证的 CI 任务5.1README.md不是文档而是可执行的验收清单打开压缩包里的README.md你会发现它不是普通说明而是按 Markdown 表格组织的测试用例矩阵步骤操作预期结果实际结果状态1mitmdump -s 小红书微信小程序.py -p 8080终端输出Proxy server listening at http://*:8080✅PASS2iOS 手机安装证书并开启信任设置 → 通用 → 关于本机 → 证书信任设置中mitmproxy显示「已启用」✅PASS3微信搜索「小红书」小程序 → 搜索关键词「防晒」mitmdump 终端出现search类型 flowflow.metadata[parsed_data]包含notes数组✅PASS4查看output.csv文件存在首行是note_id,title,desc,...第二行数据note_id非空✅PASS这个表格的设计意图很明确把环境部署、流量捕获、数据解析、落表验证四个环节全部量化为可勾选的原子操作。我习惯把它转成 Python 自动化测试脚本# test_flow_validation.py import subprocess import time import csv import os def test_mitm_start(): proc subprocess.Popen([mitmdump, -s, 小红书微信小程序.py, -p, 8080], stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, textTrue) time.sleep(3) assert Proxy server listening in proc.stdout.readline() proc.terminate() def test_csv_output(): # 模拟一次搜索操作后检查 CSV assert os.path.exists(output.csv) with open(output.csv, r, encodingutf-8) as f: reader csv.DictReader(f) rows list(reader) assert len(rows) 0 assert note_id in rows[0] if __name__ __main__: test_mitm_start() test_csv_output() print(✅ All tests passed!)5.2标签.txt的动态扩展从关键词到语义聚类的跃迁标签.txt默认是人工整理的关键词列表但实际业务中需应对长尾需求。我在小红书微信小程序.py里加了一个semantic_expand函数def semantic_expand(keyword): # 调用本地 sentence-transformers 模型需提前下载 all-MiniLM-L6-v2 from sentence_transformers import SentenceTransformer model SentenceTransformer(all-MiniLM-L6-v2) base_embeddings model.encode([keyword]) # 从预置的 10 万小红书标签库中找余弦相似度 0.7 的 Top5 similar_tags find_similar_tags(base_embeddings, tag_corpus, top_k5) return [keyword] similar_tags # 使用示例 with open(标签.txt, r) as f: original_tags [line.strip() for line in f] expanded_tags [] for tag in original_tags: expanded_tags.extend(semantic_expand(tag)) # 去重后写回标签.txt下次抓取自动覆盖这样输入#油皮自动扩展出#混油皮、#控油护肤、#油痘肌等语义相近标签大幅提升覆盖率。5.3 最关键的落地习惯每次抓包前强制执行git clean -fd git checkout .这个习惯源于一次翻车某次更新小红书微信小程序.py后忘记提交同事用旧版脚本抓包结果X-Sign算法用了旧密钥所有请求 401排查 3 小时才发现是本地文件未同步。从那以后我每次开始抓包前都强制清理工作区并重置到最新 commitgit clean -fd # 删除所有未跟踪文件包括 output.csv、mitmconf/ git checkout . # 丢弃所有已跟踪文件的修改 mitmdump -s 小红书微信小程序.py -p 8080这看似多敲两行命令但换来的是环境纯净性可验证、问题可复现、协作零歧义。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

综合能源优化调度与需求响应:MPC滚动调度的原理与工程实践

综合能源优化调度与需求响应:MPC滚动调度的原理与工程实践

简介:面向建筑蓄热与需求响应优化的综合能源优化调度Matlab仿真程序包,采用模型预测控制(MPC)与随机最优控制方法实现。案例背景是纽约市一栋带有被动和主动蓄热的办公楼,结合三级需求费及系统运营商日前调度的每小时能…

📅 2026/10/2 2:40:08
YOLOv8人脸表情识别实战:权重选型与数据集制作避坑指南

YOLOv8人脸表情识别实战:权重选型与数据集制作避坑指南

简介:YOLOv8人脸表情识别训练权重与配套数据集,面向有目标检测基础、希望快速落地表情识别项目的开发者。资源不仅提供了训练好的权重,还包含已划分train/val/test的完整数据集,并内置data.yaml配置文件,支持YOLOv5、Y…

📅 2026/10/2 2:40:08
C++ Qt宝可梦游戏开发:面向对象建模与跨平台GUI实战

C++ Qt宝可梦游戏开发:面向对象建模与跨平台GUI实战

简介:这是一份面向高校计算机专业本科生的C课程设计与期末大作业实践项目,基于Qt框架开发的宝可梦主题RPG小游戏源码,适用于C面向对象编程、GUI应用开发及小型游戏逻辑实现等教学场景。资源包共125个文件,涵盖12个核心CPP源文件&a…

📅 2026/10/2 2:40:08
MORE NEWS

更多资讯

📰

MFC/VS截屏实战:GDI BitBlt原理与避坑指南

简介:面向MFC/C开发者的屏幕截图功能实现资源,基于Visual Studio环境,完整演示如何捕获整个屏幕或指定窗口,并将其保存为BMP/JPEG文件。压缩包共22个文件,其中6个.h头文件与3个.cpp源文件承载核心逻辑,1个.…

📰

OpenRig:基于Node.js+tmux+YAML的轻量级本地AI开发工作流

1. OpenRig 是什么:一个被误读的开源项目名与真实技术图谱OpenRig 这个词在当前中文技术社区里,正经历一场典型的“语义漂移”——它既不是某个广为人知的成熟开源项目(比如 OpenCV、OpenSSH 那样有明确官网、GitHub star 数和文档体系&#…

📰

从WiFi 4到WiFi 7:协议命名、技术演进与路由器选购指南

我最近在整理WiFi系列基础内容,写到第三篇,正好是大家问得最集中的地方:802.11ac、802.11ax、802.11be这些协议名,和路由器包装上印的WiFi 5、WiFi 6、WiFi 7到底怎么对应?市面上那么多数字,到底哪个才是现…

📰

光纤环形器从原理到选型:单向传输控制与工程实战要点

光纤环形器这个东西,做光通信的应该都不陌生,但说实话,很多人对它也就是停留在“认识”的阶段——知道它能单向传光,知道它常用于OTDR和WDM系统,但真要问到它内部是怎么工作的、怎么选型、为什么某些场景必须用它而不是…

📰

React Native鸿蒙动画实战:Animated上下滑动入场踩坑与优化

把React Native应用跑到鸿蒙设备上,这个流程现在其实很成熟了:改一下入口配置,用适配层的原生容器去加载JS bundle,大部分业务页面能直接跑起来。但真正让团队头疼的往往是动画。尤其是上下滑动入场这类最常用的交互动效——列表卡…

📰

挖掘机检测模型训练:VOC数据体检与YOLO格式转换实战

简介:面向计算机视觉与目标检测学习者的挖掘机图像数据集,包含约700张已完成人工标注的图片,符合VOC标准标注格式,可直接用于训练YOLO等目标检测模型,也可转换为COCO或其他框架格式;聚焦工程车辆典型场景&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬