restclient rails net example ruby ruby-on-rails-3 http request

net - ¿Cómo hacer una solicitud HTTP usando Ruby on Rails?



ruby http request (7)

Aquí está el código que funciona si está realizando una llamada a la API REST detrás de un proxy:

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

Me gustaría tomar información de otro sitio web. Por lo tanto (tal vez) debería hacer una solicitud a ese sitio web (en mi caso, una solicitud GET de HTTP) y recibir la respuesta.

¿Cómo puedo hacer esto en Ruby on Rails?

Si es posible, ¿es un enfoque correcto para usar en mis controladores?


Mis dos formas favoritas de capturar el contenido de las URL son OpenURI o OpenURI .

OpenURI porque está en todas partes, y Typhoeus porque es muy flexible y potente.


Net :: HTTP está integrado en Ruby, pero seamos sinceros, a menudo es más fácil no usar su incómodo estilo de los 80 y probar una alternativa de mayor nivel:


OpenURI es el mejor; es tan simple como

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


Prefiero httpclient sobre Net :: HTTP.

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

HTTParty es una buena opción si está creando una clase que es un cliente para un servicio. Es una combinación conveniente que le brinda el 90% de lo que necesita. Vea cuán cortos son los clientes de Google y Twitter en los examples .

Y para responder a su segunda pregunta: no, no pondría esta funcionalidad en un controlador. En su lugar, usaría un modelo, si es posible, para encapsular los detalles (tal vez usando HTTParty) y simplemente lo llamaría desde el controlador.


Puedes usar la clase Net::HTTP Ruby:

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


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'')