2010-08-16 12 views
2

J'ai essayé ceci sur quelques machines sur différents réseaux, toutes fonctionnant ruby ​​1.8.7 et j'obtiens le même résultat après une longue attente .Ruby throws Timeout :: Erreur lors de l'appel de Net :: HTTP.get sur une URL HTTPS

Net::HTTP.get(URI.parse('https://encrypted.google.com/')) 
    Timeout::Error: execution expired 

mais HTTP fonctionne très bien

Net::HTTP.get(URI.parse('http://www.google.com/')) 

Après le délai d'attente inital je reçois un EOFError à la place

EOFError: end of file reached 

Il est vraiment m'a fait perplexes. Si vous avez des idées ou vous pouvez me faire savoir si vous obtenez les mêmes résultats, je l'apprécierais vraiment.

Répondre

4

Je pense que vous devez définir use_ssl true ...

exemple:

uri = URI.parse("https://www.google.com/") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 

request = Net::HTTP::Get.new(uri.request_uri) 

response = http.request(request) 

puts response.body 

Ceci est cannibalisé du Ruby suivant à l'intérieur post.

+0

Merci Brian! C'est juste ce que j'avais besoin de savoir. Après avoir vu à quel point Net :: HTTP est compliqué pour un simple url_exists? appel je pense que je vais prendre les conseils de Ruby Inside et aller avec HTTParty car il me donne les mêmes résultats avec beaucoup moins de tracas. HTTParty.head ('https://encrypted.google.com') .response.is_a? (Net :: HTTPSuccess) – aNoble

+0

Je pense que c'est une bonne idée ... HTTParty simplifie beaucoup les opérations http - quoique un peu lourd car il nécessite plusieurs gemmes externes (activesupport par exemple). – Brian