Ruby Net::HTTPの使い方と(直接)使うべきでない時
rubyで単純なHTTP Getをするのであれば、openuriが圧倒的に便利ファイルと同じように、http getリクエストを扱えてしまう。 しかし、比較的複雑なリクエスト(例:POST、ヘッダに何か入れる)の場合、net/httpを使う。
#最も単純なGET Net::HTTPでのgetは以下のようになる。 この程度ならopenuriを使った方が良い。
require "net/http"
#レスポンスをブロックの外で使いたい時には事前に定義しておこう
#ブロックがクロージャであることを忘れずに
response=nil
uri = URI.parse("http://example.net/")
Net::HTTP.start(uri.host, uri.port) do |http|
response = http.get("/index.html")
puts response.code # ステータスコード
puts response.message # メッセージ
puts response.body # レスポンスボディ
end
puts response.message # => OK
以下のようにインスタンスを作成してからコネクションを開く事もできる。 しかしこの場合には、最後にクローズしないとだめ。忘れるとシツレイ。 startにブロックを渡せば、ファイルオープンと同じように最後にクローズを勝手にやってくれるので安心。
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new("/index.html")
http.close
#HTTPSへのGET
以下のようにstartの引数に:use_ssl=>trueを渡してやる。
require "net/http"
uri = URI.parse("https://example.net/")
Net::HTTP.start(uri.host, uri.port,:use_ssl=>true) do |http|
response = http.get("/index.html")
puts response.body
end
#POSTの場合
require "net/http"
uri = URI.parse("http://example.net/")
Net::HTTP.start(uri.host, uri.port) do |http|
response = http.post("/search.cgi",'query=foo',header=nil)
puts response.code
puts response.message
puts response.body
end
Net::HTTP解説のリンク
チートシート
http://www.rubyinside.com/nethttp-cheat-sheet-2940.html
RestでJSONリクエストを投げる例。 https://www.socialtext.net/open/very_simple_rest_in_ruby_part_3_post_to_create_a_new_workspace http://altarf.net/computer/ruby/2890
restを作る時に便利なgem
https://github.com/rest-client/rest-client
以下に該当する場合にはNet::HTTPを使うべきでない。
単純なGETしかしない →openuriを使う http://ruby-doc.org/stdlib-2.1.0/libdoc/open-uri/rdoc/OpenURI.html
クローラーを作りたい
→anemoneを使う
https://github.com/chriskite/anemone
Amazonの商品検索、操作APIを使いたい →asinを使う https://github.com/phoet/asin
AWSのRESTを使いたい →aws-sdk-rubyを使う https://github.com/aws/aws-sdk-ruby
なんかRESTを使いたい。 →rest-clientを使う https://github.com/rest-client/rest-client