Próbuję użyć Net::HTTP.get()
adresu URL https:
@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())
Jednak podczas próby wydrukowania wyników otrzymuję następujący wynik:
nie można przekonwertować URI :: HTTPS na ciąg
O co chodzi? Używam Ruby 1.8.7 (OS X)
IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )
tylko do wyłączenia weryfikacji SSL. W naszym przypadku bezpieczeństwo nie było problemem, serwer był poza naszą kontrolą i było to rozwiązanie tymczasowe.Odpowiedzi:
Oryginalna odpowiedź:
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)
Jak wskazano w komentarzach, jest to bardziej eleganckie:
require "open-uri" @data = URI.parse("https://example.com/some/path").read
źródło
URI.parse(uri_string).read
zamiast tego, działa tak, tak pięknie.VERIFY_NONE
? Co ewentualnie należałoby zrobić zamiast tego?require 'open-uri'
plik .read działał.EDIT: Moje prace podejście, ale @ Jason-Yeo za podejście jest o wiele łatwiejsze.
Wydaje się, że od 2.1.2
preferowanaudokumentowana metoda jest następująca (bezpośrednio cytując dokumentację ):źródło
Net::HTTP.get
wystarczy wykonać żądanie get HTTPS, jeśli do obiektu URI zostanie przekazanyhttps
adres URL. Zobacz moją odpowiedź: stackoverflow.com/a/36543895/382740 .W Ruby 2.0.0 i nowszych wersjach, zwykłe przekazanie obiektu uri z
https
adresem URL jest wystarczające, aby wykonać żądanie pobierania HTTPS.uri = URI('https://encrypted.google.com') Net::HTTP.get(uri)
Możesz to zweryfikować, wykonując żądanie pobierania w domenie z wygasłym certyfikatem.
uri = URI('https://expired.badssl.com/') Net::HTTP.get(uri) # OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
Zostało wprowadzone przez to zatwierdzenie w Rubim 2.0.0.
get_response
Metoda, która jest wywoływana przezNet::HTTP.get
metodę, ustawia:use_ssl
się prawdziwe, gdyuri.scheme
jest „https”.Zastrzeżenie: Rozumiem, że pytanie dotyczy Rubiego 1.8.7, ale ponieważ jest to jeden z niewielu najlepszych wyników wyszukiwania przy wyszukiwaniu hasła „https ruby”, i tak zdecydowałem się odpowiedzieć.
źródło
http.use_ssl = true
aby zmusić go do korzystania z SSL, a potem wszystko poszło gładko.powinno to wyglądać następująco:
źródło