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