省流
项目地址:https://github.com/xiabee/SinaDownLoad
背景
之前博客一直白嫖的微博图床,图它免费,而且 CDN 速度快,而且通过 “微博图床” 插件就可以直接一键上传图片,非常方便。
然而,不知某天之后,微博对所有的图片进行了外链限制,直接访问图片会返回 403,只有从微博内访问才能正常打开……比如这张图片:xiabee 唱歌,直接点击链接是打不开的,会返回如下提示:
然后我的博客在抢救之前,所有的图都变成了上面的亚子……全都403,一张都么得(心态崩溃.jpg)
当然,作为 CTF 选手,这种限制还是很容易绕过的。我们随便在微博内打开一张图片,能看到请求头中携带了来自微博的 Referer:这个 Referer 用于告诉微博图床,“请求是自己人”,然后图床接受到这个消息,允许通过,就能正常查看图片了。
按照这个逻辑,我们只要在每次访问图床的时候都带上这个 Referer,就能正常浏览图片了……对于 CTF 老油条来说,这个操作很简单,带个插件就行,但是考虑到我的博客里有一些小白,大概率不会操作,那就只能想办法换个图床了。
图片抢救
在换图床之前,我需要把之前存放在微博图床中的图下载下来(因为没有存本地备份)。然而如果每篇博客都得手动翻阅、找到图片链接、手动下载的话,可能现在这篇博客需要再等个几年才能发出来……所以我写了个自动化的程序,批量下载图片。
- 项目地址:https://github.com/xiabee/SinaDownLoad
- 使用方式:下载,编译,放到博客源码的目录里,运行即可
简单介绍一下核心模块:
downLoad.go
:下载图片。在请求头中添加 Referer,使得程序能够正常访问微博图床;利用 os.Create 等在本地写入图片内容
1 | unc DownLoad(url string, dir string, outFile string) error { |
fileProc.go
:输入目录路径,遍历其内部文件,返回给 urlProc
1 | func GetFileName(root string) ([]string, error) { |
urlProc.go
:输入文件,遍历文件内容,通过正则匹配找到图片 url,返回给 downLoad.go
1 | regImg := "(img|image|imag)" |
然后用这个脚本就把我在微博里的全部图片下载下来了:
然后就是更换图床的事情辣!
图床更换
考虑到免费的图床的很可能跑路这件事,我还是决定花钱买心安,直接上付费云存储。
再考虑到国内某些云价格太贵,我们直接换到了 AWS S3
,具体的费用情况还可以,乱七八糟的服务加起来一个月几块钱的亚子,如果只考虑存储用的 S3,会更便宜
AWS S3 图床的具体使用方法可以参考这篇博客:AWS S3+CloudFront 打造自己的图床