[ruby] Ruby on Rails를 사용하여 HTTP 요청을하는 방법은 무엇입니까?

다른 웹 사이트에서 정보를 얻고 싶습니다. 따라서 (아마도) 해당 웹 사이트 (내 경우에는 HTTP GET 요청)에 요청하고 응답을 받아야합니다.

Ruby on Rails에서 어떻게 만들 수 있습니까?

가능하다면 컨트롤러에서 사용하는 올바른 방법입니까?



답변

루비 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는 루비에 내장되어 있지만, 까다로운 1980 년대 스타일을 사용 하지 않고 더 높은 수준의 대안을 시도하는 것이 더 쉬운 경우 가 있습니다.


답변

OpenURI가 최고입니다. 그것은 간단합니다

require 'open-uri'
response = open('http://example.com').read


답변

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 클라이언트가 얼마나 짧은 지 확인하십시오 .

그리고 두 번째 질문에 대답하기 위해 : 아니오, 나는이 기능을 컨트롤러에 넣지 않을 것입니다-가능하면 모델을 사용하여 가능하면 특정 내용을 캡슐화하고 (아마 HTTParty를 사용하여) 컨트롤러에서 간단히 호출하십시오.


답변

URL의 내용을 잡는 가장 좋아하는 두 가지 방법은 OpenURI 또는 Typhoeus 입니다.

OpenURI는 어디에나 있기 때문에, Typhoeus는 매우 유연하고 강력하기 때문에.


답변

프록시 뒤에서 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