CSDN一键同步多平台插件原理深度解析(非官方API版)
关键词:
CSDN同步插件、CSDN同步微信公众号、CSDN一键发布、多平台同步博客、公众号自动发布原理、Chrome扩展抓取Cookie、公众号草稿接口
我为什么去研究这个插件
最近在写技术博客时,CSDN 官方突然发布了一个 Chrome 插件:
👉 https://sync.csdn.net/
官方宣传非常吸引人:
- 一键同步文章到6+ 主流平台
- 支持微信公众号、知乎、微博
- 无需手动跨平台发布
- 可视化同步反馈
- 强调安全性和稳定性
作为经常多平台发文的人,我第一反应不是“太方便了”,而是:
它到底是怎么做到的?
因为真正做过公众号自动化的人都知道一件事:
公众号官方开放平台并没有提供“发布文章”的API。
于是我直接把插件解包,读了一遍源码。
结果比想象中更有意思。
这篇文章讲清楚它的真实技术实现。
官方宣传 vs 实际技术路线
先给结论:
它并没有接入公众号开放平台 API
而是在你本机浏览器里复用登录态,重放公众号后台请求
一句话总结:
扩展权限 + 浏览器cookie + 修改请求头 + 调公众号后台草稿接口本质是:
自动替你在后台点了一次“保存草稿”。
一、第一步:在 CSDN 页面抓文章
核心代码位置:
contentScripts/index.global.js
插件在 CSDN 文章页直接读取 DOM:
#articleContentId.title-article// 标题#content_views// 正文同时会做三件事:
- 从正文图片里选第一张较大图片作为封面
- 从 URL 解析 articleId
- 生成文章结构数据
这一步非常典型:Content Script 抓页面。
二、把文章交给扩展后台
前端页面并不直接发布。
流程是:
CSDN页面 → ContentScript → Background Service Worker关键通信:
GET_PREPROCESS_CONFIGSpublishToPlatforms- MessageChannel
$pluginSyncer注入 API
本质是:
页面只负责采集,真正的“发布”全部在后台执行。
三、最关键:公众号兼容化处理
公众号编辑器限制非常多,所以插件先做一轮HTML转码:
处理规则包括:
| 处理项 | 原因 |
|---|---|
| removeLinks | 公众号限制外链 |
| compactHtml | 压缩结构 |
| 代码块转换 | 公众号不支持<pre> |
| KaTeX/MathJax → 图片 | 公众号不支持公式 |
| Mermaid → 图片 | 不支持图表脚本 |
最终会生成:
platformContents = { wechat: HTML1, zhihu: HTML2, weibo: HTML3 }每个平台一份专用HTML。
这一步非常工程化。
四、核心黑科技:复用公众号登录态
这一段是整个插件最关键的地方。
它访问:
https://mp.weixin.qq.com/请求强制带 cookie:
credentials:"include"然后做了一件“很野”的事:
直接从公众号后台页面源码里抠数据
用正则解析:
- token
- ticket
- user_name
- nick_name
- time
- 头像
保存为:
weixinMeta之后所有请求都依赖这套数据。
注意:
没有 OAuth
没有开放平台
完全靠浏览器已登录状态
五、伪装请求来源(关键)
公众号后台接口会校验来源。
插件使用 Chrome 权限:
declarativeNetRequest.updateDynamicRules动态修改请求头:
| Header | 修改为 |
|---|---|
| Origin | https://mp.weixin.qq.com |
| Referer | https://mp.weixin.qq.com |
并且:
- 只对扩展请求生效
- 用完立即删除规则
这一招非常关键,否则接口直接 403。
六、重新上传所有图片
公众号不允许外链图片。
所以插件会:
- fetch 原图 → Blob
- 上传到公众号素材接口
接口:
filetransfer?action=upload_material参数包含:
- token
- ticket
- ticket_id=userName
- svr_time
拿到:
cdn_url然后替换正文所有图片地址。
这一步和手动粘贴图片完全一致。
七、再次清洗公众号HTML
公众号的限制非常严格:
插件再次处理:
- 删除所有外链
<a> - LaTeX →
latex.csdn.net图片 - 外包
<section> - 强制内联样式
目标只有一个:
模拟公众号编辑器能接受的HTML
八、真正的发布:保存草稿
最关键接口:
POST https://mp.weixin.qq.com/cgi-bin/operate_appmsg参数核心:
title0=标题 content0=正文HTML sub=create type=77返回:
appMsgId说明:
草稿已创建成功
插件只做draftOnly = true
所以:
不会自动群发
只会生成草稿。
九、统一调度所有平台
后台统一调度:
PUBLISH_TO_PLATFORMS边执行边回传:
SYNC_PROGRESS最后:
- 写入本地同步历史
- 上报同步结果给 CSDN BizAPI
注意:
CSDN服务器没有替你发文章
只是记录结果
十、为什么说这套方案“强但脆弱”
优势:
- 不需要官方API
- 用户零配置
- 体验极好
但存在根本风险:
只要公众号后台改动以下任意一项:
- token提取方式
- 图片上传接口
- 草稿接口
- 风控策略
插件可能瞬间失效。
这是所有“浏览器自动化方案”的共同宿命。
总结
一句话总结这款插件:
它不是调用官方API,而是模拟你本人在后台操作。
技术路线:
抓DOM → 复用Cookie → 伪造请求头 → 上传素材 → 调草稿接口本质属于:
浏览器自动化发布方案
如果你做过自动化、爬虫或扩展开发,会发现这套设计非常典型且工程化。
如果后面想继续拆知乎/微博的实现,可以再写一篇完整拆解。