暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

找到 Cloudflare Worker 的所有IP & 备份公众号文章到 CF Worker 中

背井 2021-03-03
2860

之前写过一篇《还是关于爬爬爬...爬虫,送你很多个公网ip怎么样》,介绍怎么复用 Cloudflare Worker 作为爬虫代理。实验中的 worker 域名为:ip.ym.workers.dev,访问这个网站,每次返回的 IP 都可能不同,这个 IP 实际是运行该 Worker 的网络环境的IP,比如:

curl https://ip.ym.workers.dev
{
  "origin""162.158.165.175"
}

由于负债重,为了节约成本,之前买的几台服务器我都退了。但作为开发,有时还是会有用到服务器的需求,幸好 CF Worker 是个不错的选项,尤其是最近 kv 存储也有免费配额了,我自然要拿来试试手。


第一个尝试,是把微信公众号的文章同步到 Worker 上,这样即使文章被屏蔽,在 Worker 上仍然能看到。

我的实现步骤是:

  1. 使用 wrangler 初始化一个新的 Worker 项目;
  2. 编写代码,调用 微信公众号API 拉取公众号文章并保存到 Cloudflare kv 中;
  3. 将个人域名绑定到这个新的 Worker 项目,域名暂定为 blog.beloved.family
  4. 当用户访问 blog.beloved.family/:文章名 时,从 kv 中读取文章渲染为 HTML 给到浏览器;
  5. 因为不定期会写新的公众号文章,还要用 Worker 的定时任务来定期同步。

成果呢?访问这篇文章试试:https://blog.beloved.family/:一周推文收藏第7期[1]


在运行项目的时候遇到一个问题:在用 公众号 API获取 Token 时,微信要求只能在白名单中的IP 才能发起请求。

因为 Worker 运行在 Cloudflare 全球节点上,其 IP 既非单个,也非固定。我首先想到的是,在公众号里配置常用的全匹配IP0.0.0.0。可以保存成功,但并不生效,很明显微信不支持这个,只能指定具体的IP。

那么,怎么得到 Worker 的全部 IP 呢?

回头想想,文章最开头的 ip.ym.workers.dev 刚好可以用来获取 Worker 的IP。要收集尽可能多的IP,我写了如下脚本来提取:

while true ; do 
  curl -s https://ip.ym.workers.dev \
  | jq .origin -r >> ip.txt
done

这段脚本通过 curl 不断访问上述网站,并将返回结果中的 IP 写入 ip.txt 文件中。

将上述命令运行半小时后,再对 ip.txt 文件中的IP进行去重:

cat ip.txt | sort | uniq
162.158.165.140
162.158.165.141
162.158.165.152
162.158.165.153
162.158.165.168
162.158.165.169
...

我们得到了很多 IP (目前是121个,不固定,后期很可能会变)。

把这些 IP 复制出来,配置到微信公众号后台IP白名单中。一个完整的公众号备份网站就此搞定。

参考资料

[1]

一周推文收藏第7期: https://blog.beloved.family/:一周推文收藏第7期

- END -


文章转载自背井,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论