Я пытаюсь использовать Net::HTTP.get()
для https URL:
@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())
Однако при попытке распечатать результаты получаю следующий результат:
не может преобразовать URI :: HTTPS в строку
В чем дело? Я использую Ruby 1.8.7 (OS X)
IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )
просто отключить проверку SSL. В нашем случае безопасность не была проблемой, сервер был вне нашего контроля, и это было временным решением.Ответы:
Оригинальный ответ:
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
источник
URI.parse(uri_string).read
вместо этого, так красиво работает.VERIFY_NONE
значит? Что, возможно, следует сделать вместо этого?require 'open-uri'
.read работал.EDIT: Мой подход работает, но @ JASON-Ео в подходе гораздо проще.
Похоже, что начиная с
версии2.1.2предпочтительныйдокументированный метод выглядит следующим образом (с прямым цитированием документации ):источник
Net::HTTP.get
достаточно выполнить запрос на получение HTTPS, если объекту URI передаетсяhttps
URL-адрес. См. Мой ответ: stackoverflow.com/a/36543895/382740 .В Ruby 2.0.0 и выше простой передачи объекта uri с
https
URL-адресом достаточно для выполнения запроса на получение HTTPS.uri = URI('https://encrypted.google.com') Net::HTTP.get(uri)
Вы можете проверить это, выполнив запрос на получение в домене с просроченным сертификатом.
uri = URI('https://expired.badssl.com/') Net::HTTP.get(uri) # OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
Он был введен этим коммитом в Ruby 2.0.0.
get_response
Метод, который вызываетсяNet::HTTP.get
метод, устанавливает:use_ssl
, чтобы верно , когдаuri.scheme
это «HTTPS».Отказ от ответственности: я понимаю, что вопрос касается Ruby 1.8.7, но поскольку это один из немногих лучших результатов поиска по запросу «https ruby», я все равно решил ответить.
источник
http.use_ssl = true
чтобы заставить его использовать ssl, но потом все пошло гладко.это должно выглядеть так:
uri.port = Net::HTTP.https_default_port() @data = Net::HTTP.get(uri)
источник