微博图片外链临时解决
Contents
最近微博给用户上传的图片增加了反盗链。鼓捣了一个小时终于把这个问题给搞定了。
原因
微博的反盗链机制目前很简单,就是查referer
这个header。但是如果请求中没有这个header,那么也是可以的。正好HTML的图片tag img
有一个属性referrerpolicy,可以让浏览器不发送referer header。那么只要在博客图片里面加上这个属性就可以了。
这个属性还属于experimental的阶段。 iOS的Safari还不支持。不过FF和Chrome的较新版本都支持了。
盲猜一下为什么微博没有把没有referer的也给封杀了:也许有一些非WEB端也会请求图片吧。
解决
Hexo Tag
Hexo Tag 类似于一个自定义的可以在Markdown文件中调用的函数。它会在generate的时候运行把调用位置替换成函数的返回结果。
1 | hexo.extend.tag.register('sinaimage', function(args){ |
这个函数很简单,没什么好说的。把它保存成一个.js
文件然后放到hexo project目录下面的scripts目录里,没有就创建一个。
在Markdown中这样调用
1 | {% sinaimage https://wx4.sinaimg.cn/large/xxxxx.jpg %} |
替换以前文章中的图片
使用sed
就可以批量替换掉以前文章中插入的图片了。
1 | sed -i -E 's/.*\!\[.*\]\((https?\:\/\/.*\.sinaimg\.cn.*)\)/\{% sinaimage \1 %\}/g' 'FILE_PATH' |
以上的正则请自行修改。注意做好备份。
暂时就解决了。