2018年5月28日月曜日

標準ライブラリの net/http を使ったサンプル集

概要

net/http は Ruby に標準でインストールされている HTTP のクライアントライブラリです
Ruby にはいろいろな HTTP のクライアントライブラリがありますがこれは標準で使えます
gem をインストールするまでもない場合は net/http を使えば OK です
簡単な使い方のサンプルを紹介します

環境

  • macOS 10.13.4
  • Ruby ruby 2.5.1p57

とりあえず GET する

require 'net/https'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Get.new uri.request_uri
res = http.request req
pp res.body

GET 時にクエリストリングを設定する

require 'net/https'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
p = { "key" => "value" }
uri.query = URI.encode_www_form(p)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Get.new uri.request_uri
res = http.request req
pp res.body

ヘッダを設定する

require 'net/https'
require 'json'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Get.new uri.request_uri
req['X-Test-Header'] = 'test_header'
res = http.request req
pp JSON.parse(res.body)['headers']['HTTP_X_TEST_HEADER']

req にハッシュとして追加すれば OK です
Content-Type などは専用のメソッドがあります

  • req.content_type = 'text/xml'

レスポンスヘッダを取得する

require 'net/https'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
p = { "key" => "value" }
uri.query = URI.encode_www_form(p)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Get.new uri.request_uri
res = http.request req
res.each_header { |k,v|
  p "#{k} => #{v}"
}
p res['content-length']
pp res.body

res.eachEnumerator が返ってくるので注意

POST する

require 'net/https'
require 'json'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new uri.request_uri
res = http.request req
pp JSON.parse(res.body)['method']

パラメータ付きで POST する

require 'net/https'
require 'json'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new uri.request_uri
req.content_type = 'application/json'
req.body = { 'test_key' => 'test_value' }.to_json
res = http.request req
pp JSON.parse(res.body)['body']

XML をボディに設定する

require 'net/https'
require 'json'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new uri.request_uri
req.content_type = 'text/xml'
req.body = '<Root><Name>bob</Name><Age>30</Age></Root>'
res = http.request req
pp JSON.parse(res.body)['body']

DELETE をコールする

require 'net/https'
require 'json'

uri = URI.parse 'https://kaka-request-dumper.herokuapp.com/'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Delete.new uri.request_uri
res = http.request req
pp JSON.parse(res.body)['method']

http にアクセスしたい場合

net/https の代わりに net/http を require し

  • http.use_ssl = true

の設定を削除すればそれ以外のコードをそのまま使えます

最後に

net/http の簡単な使い方を紹介しました
他にもいろいろな使い方があるので詳細は公式のドキュメントを見ることをおすすめします

0 件のコメント:

コメントを投稿