如何防止搜索机器人每次调用 API

Posted

技术标签:

【中文标题】如何防止搜索机器人每次调用 API【英文标题】:How to prevent search bots to call API every time 【发布时间】:2018-07-06 11:53:44 【问题描述】:

我通过 php 使用 ipinfodb API,我在其中以 JSON 格式获取地理位置响应并存储在 cookie 中。我正在使用 cookie,以便下次访问者访问该站点时,无需再次调用 API,因为 ipinfodb API 限制每秒两次以上的 API 调用。一切运行良好,但我对一件事感到困惑和困惑。

当我在谷歌网站管理员工具中获取 GoogleBot 时,我得到了这个标题响应 -

HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 06 Jul 2018 11:40:02 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: location=US; expires=Sat, 06-Jul-2019 11:40:02 GMT; path=/; httponly
Cache-Control: max-age=0
Expires: Fri, 06 Jul 2018 11:40:01 GMT
Vary: Accept-Encoding,User-Agent

我知道这个响应是正确的并且工作正常,IPinfodb 数据(如国家代码)已作为“location=US”存储在 cookie 中。

但是,这是否意味着,在 googlebots(或其他机器人)抓取或获取我的网站期间,每次都会调用 API 吗?因为我知道 cookie 不能存储在 googlebot 浏览器中,所以每次调用昂贵的 API 都会制作。所以,第一个问题是:

    每次googlebot抓取我的网站时都会调用API? 或者其他方式,机器人不调用 API,那么响应如何存储在 cookie 中? 或者机器人只以普通用户的身份调用 API 一次? 如何防止 Googlebot 在每次访问时调用 API?

【问题讨论】:

【参考方案1】:

您本质上需要客户端的参与,以使您的服务器不违反外部 API 的使用条款。这在设计上是相当站不住脚的。此外,虽然这可能会减少每个用户的 API 调用次数,但一旦您有两个以上的同时访问者,您就会回到同一个问题。您当前的策略不太可能达到极限,但远未解决问题。

要正确执行此操作,您的服务器应在内部缓存 API 结果。因此,您的服务器会记住特定 IP 的 API 答案,而不是您要求客户端为您记住它。 memcache 或 Redis 或类似的东西将是最合适的存储类型。这样,服务器还可以跟踪它上次调用 API 的时间,并限制自身以避免超出允许的限制。更不用说您为来自同一 IP 的不同客户端删除重复数据。

更恰当地说,您可能希望在您的服务器上安装一个地理定位数据库并完全避免外部 API 调用。

【讨论】:

谢谢,但是每次 googlebot 抓取我的网站时都会调用 API 等未回答的问题? 如果客户端(此处为:googlebot)不发送 cookie,那么是的,您每次都在调用 API,这就是为什么我解释说这是错误的方法。 【参考方案2】:

我同意@deceze 的观点,你确实需要改变你的方法,有很多更好的方法可以做到这一点。

但是,由于您使用 PHP 调用 API,并且您的具体目标不是为 Googlebot 调用它,因此很容易使用创可贴。

我需要对网站的访问设置一些地理限制,但不想阻止 Googlebot,因此我获得了它使用的他们的 IP 地址列表。我是个好人,所以我会分享,它们是 CIDR 格式,所以你必须解决这个问题。然后,您只需告诉您的脚本不要调用来自其中之一的 API。

64.233.160.0/19
66.102.0.0/20
66.249.64.0/19
72.14.192.0/18
74.125.0.0/16
209.85.128.0/17
216.239.32.0/19
54.187.174.169/32
54.187.205.235/32
54.187.216.72/32
54.241.31.99/32
54.241.31.102/32
54.241.34.107/32
50.18.212.157/32
50.18.212.223/32
52.25.214.31/32
52.26.11.205/32
52.26.14.11/32
52.8.19.58/32
52.8.8.189/32
54.149.153.72/32
54.187.182.230/32
54.187.199.38/32
54.187.208.163/32
54.67.48.128/32
54.67.52.245/32
54.68.165.206/32
54.68.183.151/32
107.23.48.182/32
107.23.48.232/32

【讨论】:

以上是关于如何防止搜索机器人每次调用 API的主要内容,如果未能解决你的问题,请参考以下文章

Access 2003和2007都安装在同一台机器上时,如何防止Windows Installer在每次启动时运行? [关闭]

您如何获得使用翻译 API 并在每次启动到服务器时都需要 Powershell 命令的 Discord 机器人?

api design - 如何设计公共 POST api 以防止垃圾邮件请求

调用 DLL,然后调用 API

php如何防止网站内容被采集

AI智能机器人回复调用青云客API