前言

本篇文章是因为看了tombkeeper的这条微博https://weibo.com/1401527553/4394419300531748
然后自己实践了一下,确实在一定时间内是可以获取到微博被夹图片的。

原理

  1. CDN会预先存储页面

  2. Local DNS 会先在本地查找是否待解析域名的缓存记录,如果没有,向上级DNS查询;如果有,先用本地。

  3. CDN会在各个地区部署节点,便于各个地区就近访问。

基于以上信息,我们可以做出下列猜测,是否有可能离我最近的CDN节点中该图片的数据被清理了,而其他节点没有清理。

原因是:

  1. CDN缓存节点的清理需要时间

  2. 不同地区的内容管理策略不一样,可能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 <输出文件名>