2014-04-09 154 views
2

我在設置user-agent時遇到困難。正如你可以看到我的自定義user_agent_alias沒有被返回。有人可以解釋爲什麼這不起作用,我該如何解決這個問題?設置HTTP用戶代理機械化?

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) 

下面是 「用戶代理」 返回(不是我設置):

機械化/ 2.7.3的Ruby/2.0.0p353(http://github.com/sparklemotion/mechanize/

回答

5

原來問題是user_agent_alias需要特定的類型。所有可接受類型如下:

  • Linux的火狐(3.6.1)
  • 的Linux的Konqueror(3)
  • 的Linux的Mozilla
  • 的Mac火狐(3.6)
  • 的Mac的Mozilla
  • 的Mac Safari(5)
  • Mac Safari 4
  • 機械化(默認)
  • 視窗IE 6
  • 視窗IE 7
  • 視窗IE 8
  • 視窗IE 9
  • 視窗的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

你總是可以通過'puts putsize :: AGENT_ALIASES.keys'獲取支持的user_agent_aliases列表。我的安裝返回 '[「Mechanize」,「Linux Firefox」,「Linux Konqueror」,「Linux Mozilla」,「Mac Firefox」,「Mac Mozilla」,「Mac Safari 4」,「Mac Safari」 ,「Windows IE 6」,「Windows IE 7」,「Windows IE 8」,「Windows IE 9」,「Windows Mozilla」,「iPhone」,「iPad」,「Android」,「Mac FireFox」 「]'這與@Fab略有不同 –

2

它實際上是可以設置的任何用戶代理字符串:你必須使用方法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/") 

然後,它的工作原理。