Before This:
最近在研究UniApp相关的简单开发,由于不太喜欢去看完整且漫长的开发教程,相比之下,喜欢拿例子来举一反三,正好UniApp有自己的DCloud插件市场,提供了众多的还算不错的UniApp页面模板等资源,所以从这里面下载资源的次数还是比较多的的。后面用了一段时间之后,发现部分插件资源需要赞赏/观看广告后,才能下载使用,由于是学习时期,暂时没有太多的预算在这个部分(其实还是我比较穷),所以果断选择广告观看下载,然后就出现了各种报错,导致无法正常观看广告下载,于是就有了绕过观看广告的想法。
1. 熟悉
我们点击下载插件后,会弹出需要观看广告的提示,然后需要进行扫描二维码,等待手机端完成观看后,点击“我已看完并关闭广告”,会开始进行下载。
2. 分析
根据这个流程分析,页面需要知道我们是否看完了广告?这个行为的实现,可以通过WebSocket与服务器建立连接,等待服务器的响应,也可以是通过JS来不断发送HttpRequest到服务器,来获取我们是否完成广告的观看,而我们的一个思路就是劫持服务器返回的响应数据,然后进行分析修改。
这边我们保持在需要进行扫描二维码的页面,按下F12打开开发者工具,切换到网络栏后,发现JS脚本在不停的发送XHR格式的HttpRequest,而Request的名称为“watch-done-plugin-ad”,即广告播放完成,查看其响应如下:
1 | { |
一般情况下,ret字段表示请求的状态或结果代码。对于成功的请求,常见的ret值通常是以下两种:
1 | ret: 0:表示请求成功,没有错误发生。 |
通常,ret值为0或200是最常见的成功标志。
现在我们就来着手修改这个返回的数据,由于Chromium中无法直接修改响应数据,所以我们这边只能通过直接修改JS中的request字段或者通过第三方扩展插件来实现,我这边推荐我正在用的扩展插件:Ajax Interceptor Tools
3. 修改响应值
安装扩展后,在扩展中添加一个新组,新组中默认会添加一个规则,这边我们编辑规则,方法选择POST,后面“matching interface”中填入POST请求中URL的Path部分,如我的请求URL为
1 | https://ext.dcloud.net.cn/plugin/watch-done-plugin-ad |
那Path部分为/plugin/watch-done-plugin-ad
,最后就是修改整个响应部分,我们从浏览器开发工具中复制整个响应部分,然后进行修改。修改示例如下:
在这个例子中,主要修改ret
结果代码,我们分别尝试0和200,然后重新操作下载,幸运的是,修改为0的时候,就已经可以正常下载了。
Final:
- 一些反思
在这个例子中,想要实现免广告下载的途径其实还有很多,比如,在网站中,有一部分资源是不用观看广告的,我们在请求下载时,网站会检测这个资源的下载条件,是观看广告还是需要付费,所以我们其实还可以通过修改这部分来实现我们的目的。总之,这个例子其实还是很简单的,也是想帮助遇到这个问题的朋友,通过这个方法,来临时救急一下。希望DCloud官方及时修复一下吧,DCloud鸡肋的地方还是蛮多的,最简单的例子就是把Android SDK放到垃圾网盘当中,不知道是图什么。。