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

Php 如何防止搜索机器人每次调用API,php,api,cookies,header,geolocation,Php,Api,Cookies,Header,Geolocation,我通过PHP使用ipinfo数据库API,在这里我以JSON格式获得地理位置响应并存储在cookie中。我正在使用cookie,以便下次访问者访问站点时,不再需要再次调用API,因为ipinfodb API限制每秒调用两个以上的API。一切都很顺利,但有一件事让我困惑不解 当我在GoogleWebmaster工具中以GoogleBot的身份获取时,我得到了这个标题响应- HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Fri, 06 Jul 2018 11:

我通过PHP使用ipinfo数据库API,在这里我以JSON格式获得地理位置响应并存储在cookie中。我正在使用cookie,以便下次访问者访问站点时,不再需要再次调用API,因为ipinfodb API限制每秒调用两个以上的API。一切都很顺利,但有一件事让我困惑不解

当我在GoogleWebmaster工具中以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数据(如国家代码)已存储在cookie中,作为“location=US”

但是,这是否意味着,在谷歌机器人(或其他机器人)爬行或抓取我的站点时,每次都会调用API吗?因为我知道cookie不能存储在谷歌机器人浏览器中,所以每次都会调用昂贵的API。因此,第一个问题是:

  • 每次googlebot爬网我的站点时都会调用API
  • 或者有些如何,机器人不调用API,那么响应如何存储在cookie中
  • 还是机器人只作为普通用户调用API一次
  • 如何防止Googlebot每次访问都调用API
    您本质上需要客户机的参与,这样您的服务器就不会违反外部API的使用条款。这在设计上是站不住脚的。此外,虽然这可能会减少每个用户的API调用数量,但一旦您同时有两个以上的访问者,您就回到了同一问题。你目前的策略使它不太可能达到极限,但它远远不能解决问题

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


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

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

    然而,当您在PHP中调用API时,您的具体目标不是为Googlebot调用API,因此很容易在上面贴上创可贴

    我需要对网站的访问设置一些地理限制,但不想阻止谷歌机器人,所以我得到了他们使用的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?如果客户端(此处:谷歌机器人)没有发送cookie,那么是的,你每次都调用API,这就是为什么我解释说这是错误的开始方法。