如何在 Rails 中为 Mechanize 设置自定义用户代理

Posted

技术标签:

【中文标题】如何在 Rails 中为 Mechanize 设置自定义用户代理【英文标题】:How to set custom user-agent for Mechanize in Rails 【发布时间】:2011-06-27 13:05:07 【问题描述】:

我知道你有一组预定义的别名,你可以通过设置 agent.user_agent_alias = 'Linux Mozilla' 来使用,但是如果我想设置自己的用户代理,因为我正在编写一个网络爬虫并且想要识别它,因为我正在索引的网站。就像 Googlebot。

似乎有一个 user_agent 方法,但我似乎找不到任何关于它的功能的文档。

【问题讨论】:

【参考方案1】:

您可以通过别名设置用户代理

a = Mechanize.new
a.user_agent_alias = 'Mac Safari'

可用的别名存储在AGENT_ALIASES 常量中。

p Mechanize::AGENT_ALIASES

否则,请使用#user_agent 设置您的自定义用户代理。

a = Mechanize.new
a.user_agent = 'Custom agent'

【讨论】:

谢谢。我想这可能是它,但找不到确认。【参考方案2】:

我一直在寻找一种为 Mechanize 设置随机用户代理的方法,所以我最终这样做了:

a = Mechanize.new do |agent|
  agent.user_agent_alias = (Mechanize::AGENT_ALIASES.keys - ['Mechanize']).sample
end

【讨论】:

我得到了这个NoMethodError Exception: undefined method user_agent_alias for #<Mechanize:0x007fd9f6c695f8> 错误... 应该是 = Mechanize.new do |agent| agent.user_agent = Mechanize::AGENT_ALIASES[(Mechanize::AGENT_ALIASES.keys - ['Mechanize']).sample] 结束【参考方案3】:

正如@Arkhitech 回复的那样,现在您想要这样做:

  agt = Mechanize.new 
  agt.agent.user_agent = Mechanize::AGENT_ALIASES[(Mechanize::AGENT_ALIASES.keys - ['Mechanize']).sample] 

user_agent_alias 不再可用。

【讨论】:

【参考方案4】:

只是为了得到一个新的特工,那不是机械化

Mechanize::AGENT_ALIASES[(Mechanize::AGENT_ALIASES.keys - ['Mechanize']).sample]

【讨论】:

以上是关于如何在 Rails 中为 Mechanize 设置自定义用户代理的主要内容,如果未能解决你的问题,请参考以下文章

Rails:如何在 Rails 中为 Devise 设置密钥?

如何在 Rails 4 中为 AngularJS 更正设置根路由?

如何在 Rails 中为 collection_select 设置 HTML 选项?

如何在 Rails 中为 datetime_field_tag 设置默认值

如何在 Ruby on Rails 中为我的开发和生产环境设置不同的 api 密钥?

在Rails中为Postgres JSON列设置默认值< 4