RubyのhttpclientでUser-AgentにGemのバージョン情報を入れない方法

Rubyのgemのhttpclientを使うと、Webサイトのスクレイピングなどが簡単に作れます。

以下のようにすることで、リクエスト送信時のUser-Agentも設定できます。

hc = HTTPClient.new('','XXXX')

ただし、これだと実際のHTTPリクエストのUser-Agentには、以下のようにパッケージとRubyのバージョンが追加されてしまいます。

User-Agent: XXXX (2.5.3.2, ruby 2.0.0 (2014-05-08))

これはsessin.rbに以下の様に書かれているためです。

def set_header(req)
  if @requested_version
    if /^(?:HTTP\/|)(\d+.\d+)$/ =~ @requested_version
      req.http_version = $1
    end
  end
  if @agent_name && req.header.get('User-Agent').empty?
    req.header.set('User-Agent', "#{@agent_name} #{LIB_NAME}")
  end

これを防ぎ、期待したUser-Agentだけを記録するには、以下のように default_header 引数として、User-Agentをハッシュで渡します。

hc = HTTPClient.new(default_header: {"User-Agent" => "XXXX"})

こうすることで、期待した文字列のみをUser-Agentとして設定できます。

User-Agent: XXXX