RubyでハッシュをパラメータにしてHTTPリクエストを送信する。

以下の3つのことをまとめて実行するメソッドを書いた。

  • Hashからクエリー文字列作成。
  • URLのパース。
  • Basic認証
response = http_request("get", "http://www.example.com/search", {:id => 123, :name => "koseki"}, "user", "pass")

みたいにして使う。

require 'net/http'
require 'uri'

def http_request(method, uri, query_hash = {}, user = nil, pass = nil)
  uri = URI.parse(uri) if uri.is_a? String
  method = method.to_s.strip.downcase
  query_string = (query_hash||{}).map{|k,v|
    URI.encode(k.to_s) + "=" + URI.encode(v.to_s)
  }.join("&")

  if method == "post"
    args = [Net::HTTP::Post.new(uri.path), query_string]
  else
    args = [Net::HTTP::Get.new(uri.path + (query_string.empty? ? "" : "?#{query_string}"))]
  end
  args[0].basic_auth(user, pass) if user

  Net::HTTP.start(uri.host, uri.port) do |http|
    return http.request(*args)
  end
end

リダイレクトに対応したhttp_request2もgistにあげた。

以下も参照。