使用mechanize设置HTTP用户代理?

时间:2014-04-09 16:09:04

标签: ruby mechanize

我在设置user-agent时遇到了困难。如您所见,我的自定义user_agent_alias未被退回。有人可以解释为什么这不起作用以及如何解决这个问题?

require 'rubygems'
require 'mechanize'
require 'nokogiri'

m = Mechanize.new
m.user_agent_alias = 'My Custom User Agent'
page = m.get("http://whatsmyuseragent.com/")
html = Nokogiri::HTML(page.body)
puts html.xpath('//*[(@id = "body_lbUserAgent")]').map(&:content)

以下是"用户代理"被退回(不是我设定的):

  

Mechanize / 2.7.3 Ruby / 2.0.0p353(http://github.com/sparklemotion/mechanize/

2 个答案:

答案 0 :(得分:5)

原来问题是user_agent_alias需要特定类型。所有可接受的类型如下:

  • Linux Firefox(3.6.1)
  • Linux Konqueror(3)
  • Linux Mozilla
  • Mac Firefox(3.6)
  • Mac Mozilla
  • Mac Safari(5)
  • Mac Safari 4
  • 机械化(默认)
  • Windows IE 6
  • Windows IE 7
  • Windows IE 8
  • Windows IE 9
  • Windows Mozilla
  • iPhone(3.0)
  • ipad公司
  • Android(摩托罗拉Xoom)

工作代码:

require 'rubygems'
require 'mechanize'

m = Mechanize.new
m.user_agent_alias = 'Mac Safari 4'
page = m.get("http://whatsmyuseragent.com/")
html = Nokogiri::HTML(page.body)
puts html.xpath('//*[(@id = "body_lbUserAgent")]').map(&:content)

答案 1 :(得分:3)

实际上可以设置任何用户代理字符串:您必须使用方法Mechanize::Agent#user_agent=而不是Mechanize::Agent#user_agent_alias=

因此,如果您将示例更改为:

m = Mechanize.new
m.user_agent = 'My Custom User Agent'
page = m.get("http://whatsmyuseragent.com/")

然后它有效。