Ruby on Rails Net:: HTTP use_ssl throws 'undefined метод'
Здесь мой код:
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>
Google ничего не получает!
спасибо.
Ответы
Ответ 1
Это потому, что функция sock.use_ssl?
и возвращает логическое значение, это не метод setter.
Он также всегда возвращает false. Он переопределяется в пакете Net::HTTPS
, который, вероятно, вам следует использовать, если вы хотите использовать любой материал SSL.
Вот документ ruby
Ответ 2
Требовать 'net/https' в дополнение к 'net/http'. Тогда будет определено use_ssl=
.
require 'net/http'
require 'net/https'
connection = Net::HTTP::new 'www.example.com'
connection.use_ssl = true
Ответ 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
Вам нужно сделать набор для use_ssl для объекта http, а не объекта запроса. Я боролся с этим и нашел свой ответ здесь: https://github.com/nicksieger/multipart-post/issues/18
Ответ 4
Вот как вы можете сделать запрос https:
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
Ответ 5
Если вы получите "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
И теперь, по крайней мере, по моему опыту, он должен работать...