Ruby on Rails Net :: HTTP use_ssl抛出'undefined method'

时间:2010-09-26 00:29:43

标签: ruby-on-rails

这是我的代码:

sock = Net::HTTP.new(url.host, url.port)
sock.use_ssl = true
response = sock.start {|http| http.request(req)}

这是错误:

undefined method `use_ssl=' for #<Net::HTTP www.paypal.com:443 open=false>
谷歌让我一无所获!

感谢。

5 个答案:

答案 0 :(得分:17)

除了'net / http'之外还需要'net / https'。然后将定义use_ssl=

require 'net/http'
require 'net/https'
connection = Net::HTTP::new 'www.example.com'
connection.use_ssl = true

答案 1 :(得分:5)

这是因为函数是sock.use_ssl?并且它返回一个布尔值,它不是一个setter方法。

它似乎总是返回false。它在Net::HTTPS包中被覆盖,如果您想要执行任何SSL操作,这可能是您应该使用的。

Here is the ruby doc

答案 2 :(得分:3)

查看以下代码段:

Net::HTTP.start(url.host, url.port) do |http|
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http.request(req)
end

您需要在http对象上为use_ssl执行set而不是在请求对象上。我在这方面挣扎,在这里找到了答案:https://github.com/nicksieger/multipart-post/issues/18

答案 3 :(得分:1)

如果你得到“`require':没有这样的文件要加载 - net / https(LoadError)”,那就是因为你没有安装它。

如果您还没有,那么您的服务器上可能需要ssl库。例如,在Debian / Ubuntu上:

aptitude --assume-yes install libssl-dev

如果你运气不好,你可能需要重建Ruby,并支持SSL。如果手动构建,请将--with-openssl添加到配置选项。

然后你需要宝石:

gem install  openssl-nonblock --no-ri --no-rdoc

现在,至少根据我的经验,它应该有用......

答案 4 :(得分:1)

以下是执行https get请求的方法:

require "net/https"
require "uri"

uri = URI.parse("https://secure.com/")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(uri.request_uri)

response = http.request(request)

来源:http://www.rubyinside.com/nethttp-cheat-sheet-2940.html