Ruby on Rails,如何确定请求是由机器人还是搜索引擎蜘蛛制作的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby on Rails,如何确定请求是由机器人还是搜索引擎蜘蛛制作的?相关的知识,希望对你有一定的参考价值。

我有Rails应用程序,记录从每个请求到特定URL的IP地址,但在我的IP数据库中,我发现facebook blok IP如66.220.15。*和Google IP(我建议它来自bot)。是否有任何公式可以通过机器人或搜索引擎蜘蛛来确定请求中的IP?谢谢

答案

机器人需要(通过常识/礼貌比任何类型的法律更多)向用户代理发送他们的请求。您可以使用request.env["HTTP_USER_AGENT"]检查这一点,并根据需要过滤。

另一答案

由于表现良好的机器人至少通常在它们发送的UA字符串中包含引用URI,例如:

request.env["HTTP_USER_AGENT"].match(/(.*https?://.*)/)

是一种简单的方法,可以查看请求是来自机器人与人类用户的代理。这似乎比尝试匹配综合列表更强大。

另一答案

我认为你可以使用浏览器宝石检查机器人。

if browser.bot?
  # code here
end

https://github.com/fnando/browser

另一答案

另一种方法是使用crawler_detect gem:

CrawlerDetect.is_crawler?("Bot user agent")
=> true

#or after adding Rack::Request extension
request.is_crawler?
=> true

如果您想要检测各种不同的机器人(超过1000个),这将非常有用。

以上是关于Ruby on Rails,如何确定请求是由机器人还是搜索引擎蜘蛛制作的?的主要内容,如果未能解决你的问题,请参考以下文章

Rails Guides - Ruby on Rails 安全指南

如何在 Ruby on Rails 中分析请求?

如何使用 Ruby on Rails 发出 HTTP 请求?

如何使用 Ruby on Rails 发出 HTTP 请求?

如何在 ruby​​-on-rails 应用程序上使用 Rack 发送 POST 模拟请求?

使用 AJAX 请求下载文件数据 - ruby​​ on rails 3