前言
本篇文章是因为看了tombkeeper的这条微博https://weibo.com/1401527553/4394419300531748
然后自己实践了一下,确实在一定时间内是可以获取到微博被夹图片的。
原理
CDN会预先存储页面
Local DNS 会先在本地查找是否待解析域名的缓存记录,如果没有,向上级DNS查询;如果有,先用本地。
CDN会在各个地区部署节点,便于各个地区就近访问。
基于以上信息,我们可以做出下列猜测,是否有可能离我最近的CDN节点中该图片的数据被清理了,而其他节点没有清理。
原因是:
CDN缓存节点的清理需要时间
不同地区的内容管理策略不一样,可能A地无法访问,B地可以。
所以我们只需要一个拨测工具,来测试全球范围内的微博CDN节点,找到那个还没有清理图片的CDN节点,从那个节点来获取图片即可。
拨测工具推荐 17ce
linux下代码实现
curl -v -L -m 300 --resolve <HOST>:443:<cdn地址> '<图片地址>' \
-H 'authority: <HOST>' \
-H 'accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8' \
-H 'accept-language: en-GB,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,en-US;q=0.6' \
-H 'cache-control: no-cache' \
-H 'pragma: no-cache' \
-H 'referer: https://weibo.com/' \
-H 'sec-ch-ua: "Not A(Brand";v="99", "Microsoft Edge";v="121", "Chromium";v="121"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Windows"' \
-H 'sec-fetch-dest: image' \
-H 'sec-fetch-mode: no-cors' \
-H 'sec-fetch-site: cross-site' \
-H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0' \
--compressed -o <输出文件名>
windows下实现
curl -v -L -m 300 --resolve <HOST>:443:<CDN地址> "<图片地址>" ^
-H "authority: <HOST>" ^
-H "accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" ^
-H "accept-language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6" ^
-H "cache-control: no-cache" ^
-H "dnt: 1" ^
-H "pragma: no-cache" ^
-H "referer: https://weibo.com/" ^
-H "sec-ch-ua-mobile: ?0" ^
-H "sec-fetch-dest: image" ^
-H "sec-fetch-mode: no-cors" ^
-H "sec-fetch-site: cross-site" ^
-H "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0" ^
-o <输出文件名>