RubyでHTTPメソッド(GETやPOSTなど)を送る方法

Ruby

Rubyでプログラムを書くときにGETやPOSTなどのHTTPメソッドを送りたいときがあるかと思います。そのようなときに便利なのが標準ライブラリのnet/httpです。今回はこのライブラリを使ってGET, POST, PATCH, PUT, DELETEメソッドを送るにはどうしたらよいのかを記述します。

GETリクエストを送る

例えばGoogleにアクセスしようと思ったときには以下のように送ります。引数にはURIオブジェクトを渡す必要があるのでURIモジュールも読み込んでいます。

require 'net/http'
require 'uri'

# responseには文字列としてHTMLが入っているのでこれをもとにnokogiri等で解析することも出来る
response = Net::HTTP.get(URI.parse('https://www.google.com'))
# 以下の方法だと取得したデータをそのまま出力出来る
Net::HTTP.get_print(URI.parse('https://www.google.com'))

またヘッダー情報などより詳しい情報を取得したいときは以下のように行います。

require 'net/http'
require 'uri'

uri = URI.parse('https://www.google.com')
# httpsを使う場合は use_sslオプションをtrueに設定する
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.get('/')
end

# HTML等を取得する
puts response.body
# HTTPステータスコードを表示
puts response.code

POSTリクエストを送る

次にPOSTリクエストを送ってみましょう。

require 'net/http'
require 'uri'

uri = URI.parse('https://example.com')
# 第2引数にHashを指定することでPOSTする際のデータを指定出来る
response = Net::HTTP.post_form(uri, { q: 'ruby' })
puts res.body


# ステータスコード等を取得したい場合
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.post('/', 'q=ruby')
end
puts response.body
puts response.code

PATCH, PUT, DELETEリクエストを送る

PATCHやPUT, DELETEリクエストを送る際もほぼ同様になります。以下で見てみましょう。

require 'net/http'
require 'uri'

uri = URI.parse('https://example.com')
# PATCHの場合
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.patch('/', 'q=ruby&browser=1')
end

# PUTの場合
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.put('/', 'q=ruby&browser=1')
end

# DELETEの場合
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.delete('/')
end

参考リンク