使用Net :: HTTP.get作为httpsurl

我正在尝试使用Net::HTTP.get()作为https URL:

 @data = Net::HTTP.get(uri, Net::HTTP.https_default_port()) 

但是,当我尝试打印结果时,我得到以下结果:

无法将URI :: HTTPS转换为string

这是怎么回事? 我正在使用Ruby 1.8.7(OS X)

原始答案:

 uri = URI.parse("https://example.com/some/path") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true @data = http.get(uri.request_uri) 

正如评论中指出的那样,这更优雅:

 require "open-uri" @data = URI.parse("https://example.com/some/path").read 

编辑:我的方法可行,但@Jason-yeo的方法要容易得多。

从2.1.2看来, 首选的文件化方法如下(直接引用文件 ):

通过#use_ssl =启用HTTP连接的HTTPS。

 uri = URI('https://secure.example.com/some_path?query=string') Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| request = Net::HTTP::Get.new uri response = http.request request # Net::HTTPResponse object end 

在之前的Ruby版本中,您需要使用“net / https”才能使用HTTPS。 这不再是事实。

在Ruby 2.0.0及以上版本中,只需传入一个带有https url的uri对象就足以执行HTTPS获取请求。

 uri = URI('https://encrypted.google.com') Net::HTTP.get(uri) 

您可以通过对具有过期证书的域执行获取请求来validation此情况。

 uri = URI('https://expired.badssl.com/') Net::HTTP.get(uri) # OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed 

它是由Ruby 2.0.0中的这个提交引入的。

uri.scheme为“https”时,由Net::HTTP.get方法调用的get_response方法将 :use_ssl 设置为true。

免责声明:我明白这个问题是针对Ruby 1.8.7的,但是由于这是search“https ruby​​”时search结果最less的search结果之一,所以我决定回答。

这应该看起来像:

 uri.port = Net::HTTP.https_default_port() @data = Net::HTTP.get(uri)