2011-07-19 6 views
0

J'aimerais obtenir le code HTML qui serait envoyé si un client demandait une certaine action du contrôleur. Cependant, je voudrais le faire à partir du serveur. Je voudrais stocker ce HTML brut dans une base de données pour une utilisation ultérieure. Comment cela peut-il être fait?Récupérer le code HTML pour une page

Edit: J'ai besoin des extras qui sont envoyés avec une réponse aussi bien, scripts, feuilles de style, etc ...

+2

Downvotes? Ceci est une question inhabituelle mais tout à fait valide. Ne pas downvote juste parce que vous ne pouvez pas le comprendre. – providence

Répondre

0

J'espérais que je ne devrais pas le faire car il semble un peu hacky, mais cela peut être réalisé en plaçant le code HTML souhaité dans une partielle, puis en appelant

render :partial => '/the/partial' 

Voir ce lien pour plus de détails:

http://www.justinbritten.com/work/2008/10/rendering-rails-partials-in-a-model-or-background-task/

Edit: la méthode décrite dans le lien ci-dessus ne fonctionne rails 3. pour pré rails 3, utilisez AbstractController pour obtenir le rendu.

1

Vous pouvez obtenir le code HTML en utilisant la bibliothèque NET::HTTP au sein de Ruby

url = URI.parse('http://www.example.com/index.html') 
req = Net::HTTP::Get.new(url.path) 
res = Net::HTTP.start(url.host, url.port) {|http| 
    http.request(req) 
} 
body_html = res.body 

Vous pouvez ensuite enregistrer body_html dans votre objet de base de données. Le hic est que cela renvoie le code HTML que le client obtiendrait. Dans le monde "réel", le navigateur analyse ensuite ce code HTML, puis obtient des requêtes HTTP distinctes pour les feuilles de style, les scripts et les images. Vous devez faire la même chose et ensuite stocker ces objets dans des objets de base de données distincts.

Cette question vous donne des outils qui pourraient aider à la partie de l'analyse syntaxique: Method to parse HTML document in Ruby?

mot d'avertissement: Je pense que ce que vous essayez de faire va être beaucoup plus difficile que vous pensez. Réfléchissez bien à ce que vous essayez vraiment d'accomplir et si c'est la meilleure méthode pour y arriver.

Questions connexes