巧用七牛CDN的镜像功能使百度分享支持HTTPS

唉,好懒呀,好久没更新博客了。

最近搞了个 HTTPS 证书,像以前一样给博客添加了个百度分享(http://share.baidu.com/)的组件,但发现百度分享不支持 HTTPS(百度分享图标出不来,console 会提示页面有不安全的脚本元素)。看了其它几家也都不支持,搜索了下发现有人建议把百度分享所需的 js 都保存到自己本地就行了。这也是个办法,分享功能大多是抓取这个页面的 title、摘要、图片等然后起调一个页面完成分享,这些都是本地 js 文件能完成的。

看了下从百度分享获取的代码,里面主要加载了这个:http://bdimg.share.baidu.com/static/api/js/share.js,访问了一下果然还是不支持 HTTPS。然后我就天真的把 share.js 上传到了七牛 CDN(七牛是支持 HTTPS的,在空间设置-域名配置里面设置下就行),然而百度分享的图标还是没出来。看了下控制台,卧槽,又加载了一堆 js,作为一个全栈工程师,我非常灵性的瞅了眼代码里面有一段:domain:{staticUrl:”http://bdimg.share.baidu.com/”},原来是模块化加载,把链接替换成七牛 CDN  的链接后有些请求 404 了,我又天真的以为把这几个 js 文件补全就行,但是补完几个,又有几个文件 404 了,我可没耐心一个个文件补齐呀。

作为一个灵性码农,我马上想到七牛不是有个镜像存储功能嘛,设置一发:

20150817003746

故事就这么结束了吗?怎么可能。百度“幺蛾子”还是比较多。百度分享不光是分享功能,还有分享的数据分析。数据哪里来呢?前端埋点统计的呀,原理简单说就是监控分享时的点击事件,发送数据到后台。这其中的核心就是 http://nsclick.baidu.com/v.gif,需要统计的参数和值都以 GET 参数的形式附在链接后面。然后后端再清洗请求日志或者获取请求的时候就直接把数据入库了。但这个统计小图片也不支持 HTTPS。没办法,只能去掉了,方法也很简单,static/api/js/trans/logger.js 文件为空就行(上传个空文件、占个位)。到此才算大功告成。

上面是授之以渔,不想自己弄的,可以直接抓鱼,当然希望你也能明白其中的风险,文件是我这边的(可能有后门,当然我没有),而且哪天我流量没了可能会把文件删了。

update:2016-05-24,七牛账单已经超支,上面的代码地址已经失效,还请见谅。其实了解原理之后自己设置一个即可,或者自己 Nginx 反代一下。

一点后话:一直感觉百度分享没人维护了,在群里打听了下。应该是有人(部门)维护着(至于不支持 HTTPS 那是百度 CDN 的锅),但是现在不流行打社交牌了,公司也不重视这块了,还是 200 亿糯米 O2O 更实在,而且百度首页貌似也不显示搜索结果页面的分享次数了。

知识共享许可协议

说点什么

avatar
排序:   最新 | 最旧 | 得票最多
Daisy
游客
Daisy

好像这个不是很稳定呢

前端小武
游客

https://ss1.baidu.com/9rA4cT8aBw9FktbgoI7O1ygwehsv/static/api/js/share.js 你懂的
tips: 去百度分享使用的百度系的https站点里搜源码, 有对应的转换.

trackback

[…] 具体实现可以看这篇文章 […]

Runping Huang
游客
Runping Huang

之前用的你这里的.这几天发现有故障,原来你这里账单超值了. 请问博主能不能将整个打包提供?直接丢自己服务器上,无所谓cdn不cdn了

dplord
游客
dplord

哥们,你的地址失效了。自己的站点是https的,如何用自己站点的https反向代理baidu share的这些资源呢??

能不能方便给个完整版的教程??刚好你研究过这些。

Edward Zhang
游客
Edward Zhang

感谢你的代码

Ysicing
游客

感谢你的代码= =,不知道我的为啥没成功= =

sojson
游客
sojson

我直接暂时先用的你

周七牛
游客
周七牛

请教个问题哈,我是刚刚了一个账号,还不太会用,怎么设置的域名(就是你的代码里的https://dn-iyz-file.qbox.me这个)?没找到设置它的地方,麻烦指点一下,谢谢!
我只看到了一个创建空间的地方,空间的名称应该不是域名吧?

周七牛
游客
周七牛

好棒的方法,正在按照你的方法操作,弄一个我自己的,希望先别删除这些百度分享的文件,非常感谢

bingoku
游客
bingoku

我靠,终于找到方法,干掉 data.js 就可以了。

bingoku
游客
bingoku

这个情况哦,怎么解决呢?

bingoku
游客
bingoku

Mixed Content: The page at ‘https://www.cnhzz.com/docker/’ was loaded over HTTPS, but requested an insecure script ‘http://api.share.baidu.com/getnum?url=https%3A%2F%2Fwww.cnhzz.com%2Fdocker%2F&callback=bd__cbs__tt3oc3’. This request has been blocked; the content must be served over HTTPS.

求助。

Mrxn
游客
Mrxn

嗯嗯 不错的方法 已转载 使用博主的 cdn 哈哈 谢谢 欢迎回访

李阳
游客
李阳

受教了,我之前还把百度分享给删除了!哈哈!

晓庄
游客
晓庄

是不是在七牛里上传share.js和logger.js文件,然后share.js改下https的地址就行了。最后再在使用百度分享同样改下https的地址就行了是么?谢谢

Cyrus Z.
游客

您好,按照您的办法,我在七牛上设置了镜像,也上传了占位文件,我的分享代码如下,可是仍然显示不安全脚本,请问有办法解决么?

代码:

window._bd_share_config={“common”:{“bdSnsKey”:{},”bdText”:””,”bdMini”:”2″,”bdMiniList”:false,”bdPic”:””,”bdStyle”:”1″,”bdSize”:”24″},”share”:{}};with(document)0[(getElementsByTagName(‘head’)[0]||body).appendChild(createElement(‘script’)).src=’https://dn-whatitalk.qbox.me/static/api/js/share.js?v=89860593.js?cdnversion=’+~(-new Date()/36e5)];

wpDiscuz