ouvert URI étend open
, de sorte que vous aurez un type de flux IO retourné:
open('http://www.example.com') #=> #<StringIO:0x00000100977420>
Vous devez lire que pour obtenir le contenu:
open('http://www.example.com').read[0 .. 10] #=> "<!DOCTYPE h"
Un grand nombre de fois une méthode vous permettra de passer différents types en tant que paramètre. Ils vérifient pour voir de quoi il s'agit et utilisent directement le contenu, dans le cas d'une chaîne, ou lisent la poignée s'il s'agit d'un flux.
HTML et XML, tels que les flux RSS, nous passons généralement la poignée à un analyseur et laissez-il saisir le contenu, l'analyse syntaxique, et retourner un objet approprié pour la recherche de plus:
require 'nokogiri'
doc = Nokogiri::HTML(open('http://www.example.com'))
doc.class #=> Nokogiri::HTML::Document
doc.to_html[0 .. 10] #=> "<!DOCTYPE h"
doc.at('h1').text #=> "Example Domains"
Bien que cela soit vrai, Open-URI remplace le Noyau Kernel #, qui est généralement utilisé pour les fichiers. Si elle n'est pas utilisée ** très ** avec prudence lorsqu'elle est combinée à une entrée de l'utilisateur, cela peut conduire les attaquants à lire le contenu de votre système de fichiers. 'open (params [: uri])', 'localhost: 3000 /? uri =/etc/passwd' et ainsi de suite. Ajouté à cette réponse très ancienne, car il apparaît encore très haut dans les résultats de recherche :) – haslo