Ich versuche, Net::HTTP.get()
für eine https-URL zu verwenden:
@data = Net::HTTP.get(uri, Net::HTTP.https_default_port())
Beim Versuch, die Ergebnisse zu drucken, wird jedoch das folgende Ergebnis angezeigt:
URI :: HTTPS kann nicht in String konvertiert werden
Was ist das Problem? Ich verwende Ruby 1.8.7 (OS X)
IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )
nur die SSL-Überprüfung deaktivieren. In unserem Fall war die Sicherheit kein Problem, der Server war außerhalb unserer Kontrolle und es war eine vorübergehende Lösung.Antworten:
Ursprüngliche Antwort:
Wie in den Kommentaren ausgeführt, ist dies eleganter:
quelle
URI.parse(uri_string).read
stattdessen, funktioniert so, so schön.VERIFY_NONE
das? Was sollte stattdessen möglicherweise getan werden?require 'open-uri'
damit die .read funktioniert.EDIT: Mein Ansatz funktioniert, aber der Ansatz von @ jason-yeo ist viel einfacher.
Ab 2.1.2 wird eine dokumentierte Methode wie folgt
bevorzugt(direkt unter Angabe der Dokumentation ):quelle
Net::HTTP.get
reicht es aus, eine HTTPS- Abrufanforderung auszuführen, wenn dem URI-Objekt einehttps
URL übergeben wird. Siehe meine Antwort: stackoverflow.com/a/36543895/382740 .In Ruby 2.0.0 und höher reicht es aus, ein Uri-Objekt mit einer
https
URL zu übergeben, um eine HTTPS-Abrufanforderung auszuführen.Sie können dies überprüfen, indem Sie eine Abrufanforderung für eine Domain mit einem abgelaufenen Zertifikat ausführen .
Es wurde durch dieses Commit in Ruby 2.0.0 eingeführt.
Das
get_response
Verfahren, das durch das aufgerufen wird ,Net::HTTP.get
Verfahren, setzt:use_ssl
auf wahr , wenn dasuri.scheme
ist „https“.Haftungsausschluss: Ich verstehe, dass die Frage für Ruby 1.8.7 ist, aber da dies eines der wenigen Suchergebnisse ist, wenn man nach "https ruby" sucht, habe ich mich entschlossen, es trotzdem zu beantworten.
quelle
http.use_ssl = true
, um es zu zwingen, tatsächlich ssl zu verwenden, und dann lief es schwimmend.das sollte so aussehen:
quelle