Использование Net:: HTTP.сделать для URL-адреса https
Я пытаюсь использовать Net::HTTP.get()
для https URL:
@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())
однако, я получаю следующий результат, когда я пытаюсь распечатать результаты:
не удается преобразовать URI:: HTTPS в строку
в чем дело? Я использую Ruby 1.8.7 (OS X)
4 ответа:
оригинальный ответ:
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
EDIT: мой подход работает, но @jason-yeo подход - это гораздо легче.
он появляется в 2.1.2
предпочтительныйдокументированный метод выглядит следующим образом (непосредственно цитируя документация):HTTPS включен для HTTP-соединения с помощью #use_ssl=.
uri = URI('https://secure.example.com/some_path?query=string') Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| request = Net::HTTP::Get.new uri response = http.request request # Net::HTTPResponse object end
в предыдущих версиях Ruby вам потребуется использовать ' net / https ПРОТОКОЛ HTTPS. Это уже не так.
в Ruby 2.0.0 и выше, просто передавая объект uri с
https
URL-адреса достаточно, чтобы сделать GET запрос по протоколу HTTPS.uri = URI('https://encrypted.google.com') Net::HTTP.get(uri)
вы можете проверить это, выполнив запрос GET на домен с просроченным сертификатом.
uri = URI('https://expired.badssl.com/') Net::HTTP.get(uri) # OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
это было введено этим commit в Ruby 2.0.0.
The
get_response
метод, который называетсяNet::HTTP.get
метод наборы:use_ssl
в true, еслиuri.scheme
is "протокол https."отказ от ответственности: я понимаю, что вопрос для Ruby 1.8.7, но поскольку это один из лучших результатов поиска при поиске "https ruby", я решил ответить в любом случае.