Comment utiliser le proxy de compression de données Google sur Firefox?

20

J'utilise GNU Icecat (version GNU de Mozilla Firefox) sur Trisquel GNU / Linux . Afin de minimiser / optimiser l'utilisation des données lors de la navigation sur le Web, je souhaite utiliser le proxy de compression de données de Google .

Alors, comment utiliser le proxy de compression de données Google sur Firefox?

Note / Historique: je me promenais pour trouver une solution à mon problème . La réponse m'a amené dans un salon de discussion , où j'ai finalement trouvé un moyen .

Pandya
la source
1
wiki.mozilla.org/Mobile/Janus Récupérez Janus de github et exécutez votre propre service?
ssnobody
code.google.com/p/datacompressionproxy Peut également être un code utile ...
ssnobody
1
Remarque: la définition directe du proxy HTTP sur compress.googlezip.net:80 ou 74.125.205.211:80 m'a connecté au proxy de compression de données, mais je n'ai pu charger aucun site avec: "Cette page ne peut pas être chargée via la compression de données Chrome Proxy. Essayez de recharger la page. " Je suppose que le proxy pourrait vérifier un en-tête spécifique à Chrome ...
ssnobody
On dirait que l'en-tête spécifique que le proxy recherche est Chrome-Proxy. Le code pour générer correctement cet en-tête se trouve dans background.js dans le proxy de compression de données lié ci-dessus.
ssnobody

Réponses:

19

L'utilisation du proxy de compression de données Google Chrome sur des navigateurs non Chrome implique deux étapes.

  1. Définissez votre proxy HTTP sur proxy.googlezip.netet port 80.
  2. Pour chacune de vos demandes, calculez et injectez un en- Chrome-Proxytête dans votre demande.

L'en- Chrome-Proxytête doit contenir la chaîne suivante: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>où:

  • horodatage: est le nombre actuel de secondes écoulées depuis l'époque unix
  • num1, num2, num3: sont des nombres aléatoires qui peuvent être définis sur 0
  • md5 string: est le md5 de la chaîne d'authentification
  • chaîne d'authentification: " <timestamp>" + " <auth key>" + " <timestamp>"
  • clé d'authentification: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • build: numéro de build de Chrome, peut être défini sur 2214
  • patch: numéro de patch Chrome, peut être défini sur 115
  • plate-forme: plate-forme Chrome, peut être définie sur " win"

Comme exemple complet de l'en-tête, vous pourriez avoir: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Maintenant, pour implémenter cela pratiquement, je pense que la solution la plus simple est d'utiliser une extension, mais il ne semble pas y en avoir une pour Firefox qui possède déjà cette fonctionnalité.

Par conséquent, j'ai implémenté ma propre extension firefox pour Firefox version 38 ou supérieure qui permet à quiconque d'utiliser le proxy de compression de données Google Chrome sur firefox et j'inclus le code ci-dessous.

Voici la procédure que j'ai utilisée pour développer et tester l'extension, et permettre à d'autres de régénérer l'extension à partir de zéro.


  1. Obtenez et installez nodejs
  2. Utiliser à npmpartir de nodejs pour installer jpmvianpm install jpm

    Notez que certaines versions du package Ubuntu nodecomme nodejssi jpmvous ne le trouvez pas, nodevous devrez peut-être installer une autre distribution de nodejs ou créer un lien nodeversnodejs

  3. Créez un nouveau répertoire pour l'extension et cddans celui-ci

  4. jpm init
  5. Répondre aux invites avec des valeurs par défaut
  6. Remplacez votre index.js par le code fourni ci-dessous
  7. jpm run

    Notez que si jpmvous ne parvenez pas à trouver Firefox dans les emplacements standard, vous devrez également passer l'indicateur -b pour jpmlui indiquer où trouver votre navigateur. (par exemple jpm run -b /path/to/Firefox/Nightly)

Vous devriez maintenant avoir Firefox ouvert avec cette nouvelle extension chargée et tout le trafic proxy via le proxy de compression de données Google Chrome pendant cette session.

Parce que jpm runcrée un profil temporaire, vous aurez besoin de jpm runcette extension chaque fois que vous souhaitez que votre trafic soit mandaté. Vous pouvez également jpm xpiet Install Add-on From Filedans le gestionnaire de modules complémentaires.

Vous pouvez vérifier que vos données sont transmises par proxy en examinant les en-têtes de réponse pour l'en- Viatête qui indique les données envoyées via le proxy de compression Chrome (par exemple Via: "1.1 Chrome-Compression-Proxy")

Vous pouvez déterminer la quantité de données que vous enregistrez en comparant l'en- Content-Lengthtête à l'en- X-Original-Content-Lengthtête dans les réponses du serveur.


Le code pour index.js suit:

/*
 * Data Compressor Proxy 0.0.1
 * License: MPL
 *
 * Based on
 * Data Compression Proxy Extension for Google Chrome on Desktop
 * (c) 2014 Jerzy Glowacki. License: Apache 2.0

 * and includes
 * JavaScript MD5 1.0.1
 * https://github.com/blueimp/JavaScript-MD5
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 * Licensed under the MIT license:
 * http://www.opensource.org/licenses/MIT
 *
 * JavaScript MD5 1.0.1 is Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

var self = require('sdk/self');
var { Class } = require('sdk/core/heritage');
var { Unknown } = require('sdk/platform/xpcom');
var {Cc, Ci} = require("chrome");
var prefsvc = require("sdk/preferences/service");

var httpRequestObserver = Class(
{
  extends:  Unknown,
  interfaces: [ 'nsIObserver' ],
  topic: '*',
  observe: function(subject, topic, data)
  {
    if (topic == "http-on-modify-request") {
      var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
      httpChannel.setRequestHeader("Chrome-Proxy", this.authHeader(), false);
    }
  },

  get observerService() {
    return Cc["@mozilla.org/observer-service;1"]
                     .getService(Ci.nsIObserverService);
  },

  authHeader : function() {
    var authValue = 'ac4500dd3b7579186c1b0620614fdb1f7d61f944';
    var timestamp = Date.now().toString().substring(0, 10);
    return 'ps=' + timestamp + '-' + '0' + '-' + '0' + '-' + '0' + ', sid=' + md5(timestamp + authValue + timestamp) + ', b=2214' + ', p=115' + ', c=win';
  },

  register: function()
  {
    this.observerService.addObserver(this, "http-on-modify-request", false);
  },

  unregister: function()
  {
    this.observerService.removeObserver(this, "http-on-modify-request");
  }
});

var httprequestobserver = httpRequestObserver();
httprequestobserver.register();
prefsvc.set("network.proxy.http", "proxy.googlezip.net");
prefsvc.set("network.proxy.http_port", 80);
prefsvc.set("network.proxy.type", 1);

!function(a){"use strict";function b(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function c(a,b){return a<<b|a>>>32-b}function d(a,d,e,f,g,h){return b(c(b(b(d,a),b(f,h)),g),e)}function e(a,b,c,e,f,g,h){return d(b&c|~b&e,a,b,f,g,h)}function f(a,b,c,e,f,g,h){return d(b&e|c&~e,a,b,f,g,h)}function g(a,b,c,e,f,g,h){return d(b^c^e,a,b,f,g,h)}function h(a,b,c,e,f,g,h){return d(c^(b|~e),a,b,f,g,h)}function i(a,c){a[c>>5]|=128<<c%32,a[(c+64>>>9<<4)+14]=c;var d,i,j,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(d=0;d<a.length;d+=16)i=m,j=n,k=o,l=p,m=e(m,n,o,p,a[d],7,-680876936),p=e(p,m,n,o,a[d+1],12,-389564586),o=e(o,p,m,n,a[d+2],17,606105819),n=e(n,o,p,m,a[d+3],22,-1044525330),m=e(m,n,o,p,a[d+4],7,-176418897),p=e(p,m,n,o,a[d+5],12,1200080426),o=e(o,p,m,n,a[d+6],17,-1473231341),n=e(n,o,p,m,a[d+7],22,-45705983),m=e(m,n,o,p,a[d+8],7,1770035416),p=e(p,m,n,o,a[d+9],12,-1958414417),o=e(o,p,m,n,a[d+10],17,-42063),n=e(n,o,p,m,a[d+11],22,-1990404162),m=e(m,n,o,p,a[d+12],7,1804603682),p=e(p,m,n,o,a[d+13],12,-40341101),o=e(o,p,m,n,a[d+14],17,-1502002290),n=e(n,o,p,m,a[d+15],22,1236535329),m=f(m,n,o,p,a[d+1],5,-165796510),p=f(p,m,n,o,a[d+6],9,-1069501632),o=f(o,p,m,n,a[d+11],14,643717713),n=f(n,o,p,m,a[d],20,-373897302),m=f(m,n,o,p,a[d+5],5,-701558691),p=f(p,m,n,o,a[d+10],9,38016083),o=f(o,p,m,n,a[d+15],14,-660478335),n=f(n,o,p,m,a[d+4],20,-405537848),m=f(m,n,o,p,a[d+9],5,568446438),p=f(p,m,n,o,a[d+14],9,-1019803690),o=f(o,p,m,n,a[d+3],14,-187363961),n=f(n,o,p,m,a[d+8],20,1163531501),m=f(m,n,o,p,a[d+13],5,-1444681467),p=f(p,m,n,o,a[d+2],9,-51403784),o=f(o,p,m,n,a[d+7],14,1735328473),n=f(n,o,p,m,a[d+12],20,-1926607734),m=g(m,n,o,p,a[d+5],4,-378558),p=g(p,m,n,o,a[d+8],11,-2022574463),o=g(o,p,m,n,a[d+11],16,1839030562),n=g(n,o,p,m,a[d+14],23,-35309556),m=g(m,n,o,p,a[d+1],4,-1530992060),p=g(p,m,n,o,a[d+4],11,1272893353),o=g(o,p,m,n,a[d+7],16,-155497632),n=g(n,o,p,m,a[d+10],23,-1094730640),m=g(m,n,o,p,a[d+13],4,681279174),p=g(p,m,n,o,a[d],11,-358537222),o=g(o,p,m,n,a[d+3],16,-722521979),n=g(n,o,p,m,a[d+6],23,76029189),m=g(m,n,o,p,a[d+9],4,-640364487),p=g(p,m,n,o,a[d+12],11,-421815835),o=g(o,p,m,n,a[d+15],16,530742520),n=g(n,o,p,m,a[d+2],23,-995338651),m=h(m,n,o,p,a[d],6,-198630844),p=h(p,m,n,o,a[d+7],10,1126891415),o=h(o,p,m,n,a[d+14],15,-1416354905),n=h(n,o,p,m,a[d+5],21,-57434055),m=h(m,n,o,p,a[d+12],6,1700485571),p=h(p,m,n,o,a[d+3],10,-1894986606),o=h(o,p,m,n,a[d+10],15,-1051523),n=h(n,o,p,m,a[d+1],21,-2054922799),m=h(m,n,o,p,a[d+8],6,1873313359),p=h(p,m,n,o,a[d+15],10,-30611744),o=h(o,p,m,n,a[d+6],15,-1560198380),n=h(n,o,p,m,a[d+13],21,1309151649),m=h(m,n,o,p,a[d+4],6,-145523070),p=h(p,m,n,o,a[d+11],10,-1120210379),o=h(o,p,m,n,a[d+2],15,718787259),n=h(n,o,p,m,a[d+9],21,-343485551),m=b(m,i),n=b(n,j),o=b(o,k),p=b(p,l);return[m,n,o,p]}function j(a){var b,c="";for(b=0;b<32*a.length;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c}function k(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;for(b=0;b<8*a.length;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c}function l(a){return j(i(k(a),8*a.length))}function m(a,b){var c,d,e=k(a),f=[],g=[];for(f[15]=g[15]=void 0,e.length>16&&(e=i(e,8*a.length)),c=0;16>c;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=i(f.concat(k(b)),512+8*b.length),j(i(g.concat(d),640))}function n(a){var b,c,d="0123456789abcdef",e="";for(c=0;c<a.length;c+=1)b=a.charCodeAt(c),e+=d.charAt(b>>>4&15)+d.charAt(15&b);return e}function o(a){return unescape(encodeURIComponent(a))}function p(a){return l(o(a))}function q(a){return n(p(a))}function r(a,b){return m(o(a),o(b))}function s(a,b){return n(r(a,b))}function t(a,b,c){return b?c?r(b,a):s(b,a):c?p(a):q(a)}"function"==typeof define&&define.amd?define(function(){return t}):a.md5=t}(this);
ssnobody
la source
3
Il est important de noter que sur ubuntu 14.04 (et trisquel est une variante idéologiquement pure à ce sujet, la commande node est nodejs pas node. J'ai tendance à recommander l'utilisation d'une version plus récente sur un référentiel alternatif - nodeource est ce que je préfère.
Journeyman Geek
1
Enfin ça marche bien sur Abrowser 38 sur Trisquel GNU / Linux
Pandya
Pouvez-vous m'aider
Pandya
Utilisez jpm xpipour construire un XPI et l'installer.
ssnobody
@ssnobody merci; vous l'avez déjà mentionné dans votre réponse mais je l'ai raté!
Pandya
7

Il existe maintenant un proxy Google DataSaver pour l' extension Firefox publié sur le site Web des modules complémentaires de Mozilla.

Proxy de compression de données Google pour Firefox - active la fonctionnalité DataSaver pour Firefox

galacticninja
la source
Celui qui l'a construit a utilisé le code que j'ai publié ci-dessus, mais a apporté plusieurs améliorations telles que la prise en charge de la navigation privée et la liste blanche. Très agréable!
ssnobody