案例地址:www.wsj.com
文章详情页访问后返回的响应内容中出现了Continue reading your article with a WSJ membership,导致无法获取完整内容。
经过观察,发现有时可以返回完整内容,有时则不返回。
案例内容:本文内容则对该请求进行分析和对页面中的数据加密进行解析。
页面分析
页面中有一段script存放了NEXT_DATA 。
NEXT_DATA 格式化
articleData 文章一些属性信息,标题、简介、时间、语言等
articleLinks 文章中的超链接
articleMeta 文章标签,出现的人名和编码
articleNewsFrontData 文章右侧的推荐栏
encryptedDataHash 未知加密数据
encryptedDocumentKey 未知加密key
hatData 顶部导航栏
savingsUnitedCouponsData 赞助提供
snippet 文章片段,未加密的部分
trendingNews 热门新闻
解密定位
搜一下关键词encryptedDataHash、encryptedDocumentKey
通过 dangerouslySetInnerHTML 插入DOM
encryptedDocumentKey 和 marketVolatility 在页面返回的 pageProps 中 。
继续调试找解密
往下走,发现核心位置。
打印查看,返回了解密后的内容。
密钥key
在 https://www.wsj.com/client 接口中注册。
但是不是一直能返回,有时候就不给了,猜测和cookie有关。清空后再刷新页面。
流程总结
文章详情页面中有部分加密数据
加密方法:AES-256-CTR
密文:在文章页面中的 NEXT_DATA 中
密钥:在 /client 接口中注册
向量:在 NEXT_DATA中
请求流程:
1、先访问文章页面拿到 encrypteddocumentkey 、 content 、IV
2、通过 encrypteddocumentkey 注册 documentKey
3、通过 documentKey、IV 解密 content
源码下载
本案例的webpack可以直接调用,但是有分包,需要合并一下调用的方法。
【温馨提示:此处隐藏内容需要付费订阅后才能查看!】