Fab Fab - 5 months ago 34
Ruby Question

Setting a HTTP user agent with mechanize?

I'm having difficulty setting the

user-agent
. As you can see my custom
user_agent_alias
is not being returned. Can someone please explain why this isn't working and how I can fix this?

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)


Below is the "user agent" being returned (not what I set):




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

Fab Fab
Answer

Turns out that the issue was that user_agent_alias requires a specific type. All acceptable types are as follows:

  • Linux Firefox (3.6.1)
  • Linux Konqueror (3)
  • Linux Mozilla
  • Mac Firefox (3.6)
  • Mac Mozilla
  • Mac Safari (5)
  • Mac Safari 4
  • Mechanize (default)
  • Windows IE 6
  • Windows IE 7
  • Windows IE 8
  • Windows IE 9
  • Windows Mozilla
  • iPhone (3.0)
  • iPad
  • Android (Motorola Xoom)

Working code:

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)