2013-10-16 3 views
0

Je veux saisir le contenu d'une page Web comme celui-ci:Comment savoir quand la fonction OpenURI open() de Ruby donne une erreur de 404 pages non trouvées?

open("http://www.ruby-lang.org/") 

Cependant, parfois, cette page n'existe pas:

open("http://www.ruby-lang.org/blabla.html") 

La commande open lance une exception. Je sais que je peux attraper cette exception, mais cela semble inapproprié dans mon cas. Je sais qu'il y aura régulièrement de mauvaises URL car les visiteurs et les utilisateurs saisissent des URL à récupérer.

Je n'aime pas l'idée d'utiliser des exceptions pour cette situation normale. Y at-il un moyen que je peux savoir que la page n'a pas été trouvée sans qu'une exception soit levée?

+1

Le seul résultat régulier de 'open' est la ressource en cours d'ouverture. Tout le reste est exceptionnel et devrait être géré par des exceptions. – Amadan

+0

Pas dans un ordre particulier, mais [HTTPClient] (https://github.com/nahi/httpclient), [RESTClient] (https://github.com/archiloque/rest-client), [Typhoeus] (https: //github.com/typhoeus/typhoeus), [Curb] (https://github.com/taf2/curb) ou [HTTParty] (https://github.com/jnunemaker/httparty) tout serait plus facile que Net :: HTTP. Mechanize peut récupérer une page, mais ce n'est pas sa raison d'être. Toutes les gemmes précédentes seraient mieux adaptées aux E/S HTTP normales. OpenURI est un excellent outil et je l'utilise souvent, mais ce n'est pas la chose la plus flexible, donc les exceptions sont votre seul choix. –

Répondre

0

Vous utilisez une méthode simplifiée pour lire un fichier (open-uri), vous obtenez ainsi un résultat simplifié pour les erreurs. Ce n'est pas une façon robuste de faire les choses au-delà du simple succès/échec.

Extrayez en utilisant Net::HTTP (en particulier la méthode request) ou Mechanize ou de nombreuses autres API disponibles pour de telles tâches.

Questions connexes