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