IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Interception des données HTML


Sujet :

Ruby on Rails

  1. #1
    Membre régulier Avatar de luigifab
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 66
    Points : 73
    Points
    73
    Par défaut Interception des données HTML
    Bonjour

    Tout d'abord, j'avoue, je ne comprends pas grand chose à Rails/Ruby, mais bon...

    Je me disais qu'il serait pas mal de mettre un coup de GZIP à mes pages HTML.
    Il semblerait que Thin n'en soit pas capable, du coup je me disais qu'en interceptant le contenu HTML final, je pouvais pallier à ce problème.

    En PHP, je fais ce genre de chose (pour simplifier) :

    ob_start('usePhpTidy');
    <code html>
    <code html>
    <code html>
    ob_end_flush()
    function usePhpTidy
    header('Content-Type: text/html; charset=utf-8');
    header('Content-Encoding: gzip');
    $html = gzencode($html, 9, FORCE_GZIP);
    Est-ce qu'il est possible avec Rails, d'intercepter via je sais pas quoi (un hook ?), le "before to send to browser" avec son objet "response" ?

  2. #2
    Membre régulier Avatar de luigifab
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 66
    Points : 73
    Points
    73
    Par défaut
    J'ai trouvé !
    Attention c'est dégueulasse !

    Dans la class ApplicationController < ActionController::Base,
    j'ai ajouté le filtre suivant :

    Code ruby : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    require 'base64'
    class ApplicationController < ActionController::Base
      after_filter :tidy
      def tidy
        if response.body =~ /<html/i
          response.header['Content-Encoding'] = 'gzip'
          response.body = `php /var/www/error/redmine.php #{Base64.encode64(response.body).gsub(/\n/, 'ø')}`
        end
      end

    Et le script PHP qui va avec :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    error_reporting(E_ALL);
    setlocale(LC_TIME, 'fr_FR.utf8');
    date_default_timezone_set('Europe/Paris');
     
    include('/var/www/error/utils.php');
     
    $html = base64_decode(str_replace('ø', "\n", $argv[1]));
    $html = str_replace('></button', '>&nbsp;</button', $html);
    $html = usePhpTidy($html); // une fonction qui appel Tidy
    $html = str_replace('>&nbsp;</button>', '></button>', $html);
    $html = str_replace('<meta charset="utf-8"/>', '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>', $html);
    $html = gzencode($html, 9, FORCE_GZIP);
     
    echo $html;

    C'est un peu moisie, mais bon, pour le moment, ça fonctionne assez bien

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/09/2014, 16h59
  2. Exploiter des données HTML dans une variable javascript
    Par beber005 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/06/2011, 17h11
  3. des données HTML vers ASPX
    Par maniaco_jazz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 25/07/2007, 19h36
  4. [HTML][FORMULAIRE] Probleme dans la récupération des données
    Par baddounet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/08/2005, 19h51
  5. extraire des données d'un code HTML
    Par blueice dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2004, 20h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo