我试图用Net::HTTP.get()
为HTTPS URL:使用的Net :: HTTP.get为HTTPS URL
@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())
但是,我得到的,当我尝试打印结果如下结果:
can't convert URI::HTTPS into String
这是怎么回事?我使用Ruby 1.8.7(OS X)
我试图用Net::HTTP.get()
为HTTPS URL:使用的Net :: HTTP.get为HTTPS URL
@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())
但是,我得到的,当我尝试打印结果如下结果:
can't convert URI::HTTPS into 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
编辑:我的方法工作,但贾森@ - 杨协成approach容易得多。
它显示为2.1.2 优选一个记录方法如下(直接引用the documentation):
HTTPS is enabled for an HTTP connection by #use_ssl=.
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
In previous versions of Ruby you would need to require ‘net/https’ to use HTTPS. This is no longer true.
这是不正确的。从Ruby 2.0.0开始,如果URI对象传递了一个“https”url,那么'Net :: HTTP.get'足以完成HTTPS获取请求。看到我的答案:http://stackoverflow.com/a/36543895/382740。 – 2016-04-11 08:50:21
在Ruby 2.0.0以上,简单地通过在URI对象与https
网址足以执行HTTPS获取请求。
uri = URI('https://encrypted.google.com')
Net::HTTP.get(uri)
您可以通过使用过期证书进行上domain GET请求验证这一点。
uri = URI('https://expired.badssl.com/')
Net::HTTP.get(uri)
# OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
它是在这个commit在Ruby 2.0.0中引入的。
的get_response
方法,它是由Net::HTTP.get
方法调用,sets:use_ssl
为true时uri.scheme
是 “HTTPS”。
声明:我明白这个问题是针对Ruby 1.8.7的,但由于这是搜索“https ruby”时搜索结果最少的搜索结果之一,因此我决定回答。
我会给出这个答案,因为这是我所问的答案,但真正的答案是指出我正在接近这个错误的方式。使用'URI.parse(uri_string).read'来代替,非常精美。 – sepiroth 2011-04-26 07:18:28
hatorade,我无法通过“读”来为我工作。你可以发表一个完整的答案来解答你自己的问题吗? – frabcus 2011-09-30 10:48:18
'VERIFY_NONE'暗示什么?应该做些什么呢? – 2011-12-30 22:58:43