web-dev-qa-db-ja.com

Ruby on Railsを使ってHTTPリクエストを行うにはどうすればいいですか?

他のウェブサイトから情報を取りたいのですが。したがって(多分)私はそのウェブサイトにリクエストをし(私の場合はHTTP GETリクエスト)、レスポンスを受け取るべきです。

Ruby on Railsでこれを行うにはどうすればいいですか?

それが可能であるならば、それは私のコントローラーで使うのが正しいアプローチですか?

229
user502052

Rubyの Net::HTTP classを使うことができます。

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
315
João Silva

Net :: HTTPはRubyに組み込まれていますが、直面してみましょう。面倒な1980年代のスタイルを使用してより高レベルの代替手段を試すほうが簡単ではないことがよくあります。

105
stef

OpenURIが最高です。それはとても簡単です

require 'open-uri'
response = open('http://example.com').read
90
user2454031
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')
75

Net :: HTTPよりも httpclient を好む.

client = HTTPClient.new
puts client.get_content('http://www.example.com/index.html')

あなたがサービスのクライアントであるクラスを作っているならHTTPartyは良い選択です。それはあなたがあなたが必要とするものの90%を与える便利なミックスインです。グーグルとツイッターのクライアントが にどれだけ近いかを見てください。

そして、あなたの2番目の質問に答えるために:いいえ、私はコントローラにこの機能を入れないでしょう - 可能であれば私は代わりにモデルを使って(おそらくHTTPartyを使って)そして単にコントローラからそれを呼び出すでしょう。

13
Mark Thomas

これは、プロキシの内側で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
8
machzqcq

URLのコンテンツを取得するための私のお気に入りの2つの方法は、 OpenURI または Typhoeus です。

OpenURIはどこにでもあるので、Typhoeusは非常に柔軟で強力です。

8
the Tin Man

Nice_http gemを使う https://github.com/MarioRuiz/Nice_http

あなたは一行でそれを行うことができます:

require 'Nice_http'
content = NiceHttp.new("http://www.example.com").get("/index.html").data
0
Mario Ruiz