这是我的代码:
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>
谷歌让我一无所获!
感谢。
答案 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操作,这可能是您应该使用的。
答案 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)