Answers:
您可以使用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')
我更喜欢httpclient而不是Net :: HTTP。
client = HTTPClient.new
puts client.get_content('http://www.example.com/index.html')
如果您要创建作为服务客户端的类,那么HTTParty是一个不错的选择。这是一个方便的mixin,可为您提供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