別のウェブサイトから情報を入手したいと思います。したがって、(たぶん)そのウェブサイトにリクエストを送信し(私の場合はHTTP GETリクエスト)、レスポンスを受信する必要があります。
Ruby on Railsでこれを作成するにはどうすればよいですか?
可能であれば、コントローラーで使用するのは正しいアプローチですか?
別のウェブサイトから情報を入手したいと思います。したがって、(たぶん)そのウェブサイトにリクエストを送信し(私の場合はHTTP GETリクエスト)、レスポンスを受信する必要があります。
Ruby on Railsでこれを作成するにはどうすればよいですか?
可能であれば、コントローラーで使用するのは正しいアプローチですか?
回答:
RubyのNet::HTTP
クラスを使用できます。
require 'net/http'
url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
puts res.body
Net :: HTTPはRubyに組み込まれていますが、正直なところ、厄介な1980年代スタイルを使用せずに、より高いレベルの代替手段を試す方が簡単な場合が多いです。
Net::HTTP
は面倒ですが、トレードオフの価値はありません。
OpenURIが最適です。それはと同じくらい簡単です
require 'open-uri'
response = open('http://example.com').read
open-uri
リダイレクトに追随しないことを警告することが重要です。
file:///etc/passwd
require 'net/http'
result = Net::HTTP.get(URI.parse('http://www.example.com/about.html'))
# or
result = Net::HTTP.get(URI.parse('http://www.example.com'), '/about.html')
私はNet :: HTTP よりもhttpclientを好みます。
client = HTTPClient.new
puts client.get_content('http://www.example.com/index.html')
HTTPartyは、サービスのクライアントであるクラスを作成する場合に適しています。必要なものの90%を提供する便利なミックスインです。例では、GoogleとTwitterクライアントがどれだけ短いかをご覧ください。
そして、2番目の質問に答えます。いいえ、この機能をコントローラーに配置しません。可能であれば、代わりにモデルを使用して(おそらくHTTPartyを使用して)詳細をカプセル化し、コントローラーから呼び出します。
プロキシの背後でREST API呼び出しを行っている場合に機能するコードは次のとおりです。
require "uri"
require 'net/http'
proxy_host = '<proxy addr>'
proxy_port = '<proxy_port>'
proxy_user = '<username>'
proxy_pass = '<password>'
uri = URI.parse("https://saucelabs.com:80/rest/v1/users/<username>")
proxy = Net::HTTP::Proxy(proxy_host, proxy_port, proxy_user, proxy_pass)
req = Net::HTTP::Get.new(uri.path)
req.basic_auth(<sauce_username>,<sauce_password>)
result = proxy.start(uri.host,uri.port) do |http|
http.request(req)
end
puts result.body