Net::HTTP的块形式是否支持HTTPS请求?

10

如果不使用块形式进行 Net::HTTP https 请求,可以采用以下方法:

...
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
...

但是在使用块形式时,有没有办法告诉Net::HTTP使用https呢?

u = URI.parse(url)
Net::HTTP.start(u.host, u.port) do |http|
  # if I put http.use_ssl = true here, ruby complains that this can't
  # be done becuase the sesion has already started
  resp = http.get(u.request_uri)
end

我使用的是Ruby 1.8.7版本。

1个回答

27

请参阅Net::HTTP.start的文档,该方法接受一个可选哈希参数。从文档中可以得知:

opt可以通过其访问器指定以下值。键包括ca_file、ca_path、cert、cert_store、ciphers、close_on_empty_response、key、open_timeout、read_timeout、ssl_timeout、ssl_version、use_ssl、verify_callback、verify_depth和verify_mode。如果将 :use_ssl 设置为 true,则可以使用https,默认的 verify_mode 值为 OpenSSL::SSL::VERIFY_PEER。

Net::HTTP.start(url.host, url.port, :use_ssl => true)

1
忘了提一下,我使用的是1.8.7版本。 - John Bachir
@John 那你做不到。Ruby 1.8.7没有这个方法签名。如果你想设置 use_ssl,那么你将无法使用块形式。当然,你可以在 https://gist.github.com/2cdc187fa0c7b608fe2c 中修补1.9.2版本的start方法。 - Lee Jarvis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接