使用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)