2011-05-27 5 views
1

Après avoir demandé open-uri, on peut facilement télécharger et utiliser des fichiers du Web via Kernel#open. Cependant, essayer de le faire avec https entraîne une erreur de certification root, car ruby ​​n'a pas tous les certificats racine.Utilisation élégante du noyau # ouvert pour https via open-uri

Ceci peut être résolu like this, mais c'est pour utiliser un objet Net::HTTP avec un bloc.

Y at-il une façon élégante de mettre use_ssl et ca_file pour la bibliothèque Net::HTTP au niveau mondial, afin qu'il appliquera à mon application entière, et des commandes comme Kernel#open?

Répondre

3

Bon, après une heure de couple que je suis venu avec ceci:

require 'open-uri' 
require 'net/https' 

module Net 
    class HTTP 
    alias_method :original_use_ssl=, :use_ssl= 
    def use_ssl=(flag) 
     self.ca_file = "/path/to/ca-bundle.crt" 
     self.original_use_ssl = flag 
    end 
    end 
end 

Décrite plus ici: https://gist.github.com/996510

+0

Je voudrais ajouter que cela a fonctionné comme une solution pour moi d'obtenir la fonction remote_url de CarrierWave (où vous pouvez ajouter une pièce jointe via l'URL à distance sur https) Merci! https://groups.google.com/forum/?fromgroups=#!topic/carrierwave/HQxayNjVAs4 –

Questions connexes