Come posso utilizzare il proxy di compressione dei dati di Google su Firefox?


20

Sto usando GNU Icecat (versione GNU di Mozilla Firefox) su Trisquel GNU / Linux . Al fine di minimizzare / ottimizzare l'utilizzo dei dati durante la navigazione sul Web, desidero utilizzare il proxy di compressione dei dati di Google .

Quindi, come posso utilizzare Google Data Compression Proxy su Firefox?

Nota / Storia: stavo vagando per trovare una soluzione al mio problema . La risposta mi ha portato in una chat room , dove finalmente ho trovato un modo .


1
wiki.mozilla.org/Mobile/Janus Prendi Janus da Github ed esegui il tuo servizio?
ssnobody,

code.google.com/p/datacompressionproxy Potrebbe anche essere utile codice ...
ssnobody

1
Come nota, l'impostazione diretta del proxy HTTP su compress.googlezip.net:80 o 74.125.205.211:80 mi ha collegato al proxy di compressione dati ma non sono stato in grado di caricare alcun sito con: "Impossibile caricare questa pagina tramite Chrome Data Compression Proxy. Prova a ricaricare la pagina. " Suppongo che il proxy stia controllando qualche intestazione specifica per Chrome ...
ssnobody il

Sembra che l'intestazione specifica che il proxy sta cercando sia Chrome-Proxy. Il codice per generare correttamente quell'intestazione è all'interno di background.js nel proxy datacompression collegato sopra.
ssnobody,

Risposte:


19

L'utilizzo del proxy di compressione dati di Google Chrome su browser non Chrome comporta due passaggi.

  1. Impostare il proxy HTTP su proxy.googlezip.nete la porta 80.
  2. Per ciascuna delle tue richieste, calcola e inserisci Chrome-Proxyun'intestazione nella tua richiesta.

L' Chrome-Proxyintestazione deve contenere la seguente stringa: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>dove:

  • timestamp: è il numero corrente di secondi trascorsi dall'epoca di unix
  • num1, num2, num3: sono numeri casuali che possono essere impostati su 0
  • stringa md5: è la md5 della stringa di autenticazione
  • stringa di autenticazione: " <timestamp>" + " <auth key>" + " <timestamp>"
  • chiave d'autenticazione: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • build: numero di build di Chrome, può essere impostato su 2214
  • patch: numero di patch di Chrome, può essere impostato su 115
  • piattaforma: piattaforma Chrome, può essere impostata su " win"

Come esempio completo dell'intestazione potresti avere: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Ora, per implementarlo praticamente, penso che la soluzione più semplice sia usare un'estensione ma non sembra esserci una soluzione per Firefox che abbia già questa funzionalità.

Pertanto, ho implementato la mia estensione firefox per Firefox versione 38 o successiva che consente a chiunque di utilizzare il proxy di compressione dati Google Chrome su Firefox e includendo il codice seguente.

Di seguito è la procedura che ho usato per sviluppare e testare l'estensione e consentirebbe ad altri di rigenerare l'estensione da zero.


  1. Ottieni e installa nodejs
  2. Utilizzare npmda nodejs per installare jpmtramitenpm install jpm

    Si noti che alcune versioni di pacchetti di Ubuntu nodecome nodejsquindi se jpmnon riesce a trovare nodepotrebbe essere necessario installare un altro distribuzione di nodejs o di creare un collegamento per nodeanodejs

  3. Crea una nuova directory per l'estensione e cdin essa

  4. jpm init
  5. Rispondere alle richieste con i valori predefiniti
  6. Sostituisci index.js con il codice fornito di seguito
  7. jpm run

    Nota che se jpmnon riesci a trovare Firefox nelle posizioni standard, dovrai anche passare il flag -b jpmper dirgli dove trovare il tuo browser. (ad es. jpm run -b /path/to/Firefox/Nightly)

Ora dovresti avere firefox aperto con questa nuova estensione caricata e tutto il traffico inoltrato tramite il proxy di compressione dati di Google Chrome durante questa sessione.

Poiché jpm runcrea un profilo temporaneo, dovrai avere jpm runquesta estensione ogni volta che desideri che il tuo traffico venga sottoposto a proxy. Puoi anche jpm xpie Install Add-on From Filein Gestione componenti aggiuntivi.

Puoi verificare che i tuoi dati vengano sottoposti a proxy esaminando le intestazioni di risposta per l' Viaintestazione che indica i dati inviati tramite il proxy di compressione Chrome (ad es. Via: "1.1 Chrome-Compression-Proxy")

È possibile determinare quanti dati si stanno salvando confrontando l' Content-Lengthintestazione con l' X-Original-Content-Lengthintestazione nelle risposte del server.


Il codice per index.js è il seguente:

/*
 * 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);

3
Una cosa degna di nota è che su Ubuntu 14.04 (e trisquel è una variante ideologicamente pura su questo, il comando node è nodejs non node. Di conseguenza tendo a raccomandare di utilizzare una versione più recente su un repository alternativo - nodesource è ciò che preferisco.
Journeyman Geek

1
Finalmente funziona bene su Abrowser 38 su Trisquel GNU / Linux
Pandya il

Puoi aiutarmi
Pandya,

Utilizzare jpm xpiper creare un XPI e installarlo.
ssnobody,

@ssnobody grazie; hai già menzionato nella tua risposta ma me l'ho persa!
Pandya,

7

Esiste ora un proxy Google DataSaver per l' estensione di Firefox pubblicato nel sito Web dei componenti aggiuntivi di Mozilla.

Il proxy di compressione dati di Google per Firefox abilita la funzione DataSaver per Firefox


Chiunque l'abbia creato ha usato il codice che ho pubblicato sopra, ma ha apportato diversi miglioramenti come il supporto alla navigazione privata e la whitelisting. Molto bella!
ssnobody,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.