다른 웹 사이트에서 정보를 얻고 싶습니다. 따라서 (아마도) 해당 웹 사이트 (내 경우에는 HTTP GET 요청)에 요청하고 응답을 받아야합니다.
Ruby on Rails에서 어떻게 만들 수 있습니까?
가능하다면 컨트롤러에서 사용하는 올바른 방법입니까?
다른 웹 사이트에서 정보를 얻고 싶습니다. 따라서 (아마도) 해당 웹 사이트 (내 경우에는 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 년대 스타일을 사용 하지 않고 더 높은 수준의 대안을 시도하는 것이 더 쉬운 경우 가 있습니다.
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 클라이언트가 얼마나 짧은 지 확인하십시오 .
그리고 두 번째 질문에 대답하기 위해 : 아니오, 나는이 기능을 컨트롤러에 넣지 않을 것입니다-가능하면 모델을 사용하여 가능하면 특정 내용을 캡슐화하고 (아마 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