20 06 2021

现在越来越多站点开始注重防止被过度采集内容了,很多蜘蛛、采集对站点的内容毫无用处。

限制采集一般分几种,一种通过cookie来判断次数,这种基本形同虚设,就不在本文讨论。

另外一种是记录IP的访问次数,然后进行限制,这种解决起来就很麻烦了。

一般有2种办法解决,一种购买动态IP代理,可以绕过IP次数限制,缺点是要花钱。

那么就得寻求一种不花钱,又有很多IP可以用的办法。

这个时候就令人想到了大名鼎鼎的Cloudflare,Cloudflare是主营CDN,其IP数量达到千万级别,完全可以支撑24小时不间断的采集需求。

那么问题来了,怎么利用Cloudflare的庞大IP库,第一种情况,如果目标站点没有在cloudflare中添加域名,那么我们可以抢先在cloudflare里面添加对方域名,然后通过修改采集机器的hosts来把域名强行指向cloudflare,这样相当于间接利用了cloudflare的IP库。

如果cloudflare中无法添加对方域名,那么就只能利用cloudflare的workers服务来进行流量中转。

cloudflare的workers的注册和创建本文略过,需要的同学自行百度,下面贴出中转代码:

addEventListener('fetch', event => {
  event.respondWith(proxy(event));
});

async function proxy(event) {
  const getReqHeader = (key) => event.request.headers.get(key);

  let url = new URL(event.request.url);
  url.hostname = "www.sogou.com";

  let parameter = {
    headers: {
      'Host': 'www.sogou.com',
      'User-Agent': getReqHeader("User-Agent"),
      'Accept': getReqHeader("Accept"),
      'Accept-Language': getReqHeader("Accept-Language"),
      'Accept-Encoding': getReqHeader("Accept-Encoding"),
      'Connection': 'keep-alive',
      'Cache-Control': 'max-age=0'
    }
  };
  return fetch(new Request(url, event.request), parameter);
}

上面代码中,比如我要采集www.sogou.com/search这个页面,那么只需要把采集地址的www.sogou.com替换成workers的地址就可以了。

  1. 上一篇:使用docker快速搭建Guacamole,实现web远程桌面
  2. 下一篇:centos7设置CPU的运行频率为performance
发表评论