Como uso o proxy de compactação de dados do Google no Firefox?

20

Estou usando o GNU Icecat (versão GNU do Mozilla Firefox) no Trisquel GNU / Linux . Para minimizar / otimizar o uso de dados durante a navegação na web, desejo usar o proxy de compactação de dados do Google .

Então, como uso o Google Data Compression Proxy no Firefox?

Nota / Histórico: Eu estava vagando para obter solução para o meu problema . A resposta me levou a uma sala de bate-papo , onde finalmente encontrei uma maneira .

Pandya
fonte
11
wiki.mozilla.org/Mobile/Janus Pegue o Janus no github e execute seu próprio serviço?
precisa saber é o seguinte
code.google.com/p/datacompressionproxy também pode ser código útil ...
ssnobody
11
Como observação, a configuração direta de proxy HTTP como compress.googlezip.net:80 ou 74.125.205.211:80 me conectou ao Proxy de compactação de dados, mas não foi possível carregar sites com: "Esta página não pode ser carregada pelo Chrome Data Compression Proxy. Tente recarregar a página. " Suponho que o proxy poderia ser a verificação de algum cabeçalho específicos do Chrome ...
ssnobody
Parece que o cabeçalho específico que o proxy está procurando é o Chrome-Proxy. O código para gerar esse cabeçalho corretamente está em background.js no datacompressionproxy vinculado acima.
Ssnobody

Respostas:

19

O uso do Proxy de compactação de dados do Google Chrome em navegadores não Chrome envolve duas etapas.

  1. Defina seu proxy HTTP como proxy.googlezip.nete porta 80.
  2. Para cada uma das suas solicitações, calcule e injete um Chrome-Proxycabeçalho na sua solicitação.

O Chrome-Proxycabeçalho deve conter a seguinte string: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>where:

  • timestamp: é o número atual de segundos decorridos desde a época unix
  • num1, num2, num3: são números aleatórios que podem ser definidos como 0
  • md5 string: é o md5 da string de autenticação
  • auth string: " <timestamp>" + " <auth key>" + " <timestamp>"
  • chave de autenticação: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • build: número da versão do Chrome, pode ser definido como 2214
  • patch: número do patch do Chrome, pode ser definido como 115
  • plataforma: plataforma Chrome, pode ser definida como " win"

Como um exemplo completo do cabeçalho, você pode ter: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Agora, para implementar isso praticamente, acho que a solução mais fácil é usar uma extensão, mas não parece haver uma para o firefox que já tenha essa funcionalidade.

Portanto, implementei minha própria extensão do firefox para Firefox versão 38 ou superior, que permite a qualquer pessoa usar o Proxy de compactação de dados do Google Chrome no firefox e incluo o código abaixo.

A seguir, é o procedimento que eu usei para desenvolver e testar a extensão e permitiria que outras pessoas regenerassem a extensão do zero.


  1. Obter e instalar nodejs
  2. Use npmfrom nodejs para instalar jpmvianpm install jpm

    Note que algumas versões do pacote Ubuntu nodecomo nodejsisso, se jpmnão conseguir encontrar nodevocê pode precisar instalar outra distribuição de nodejs ou criar um link para nodeanodejs

  3. Crie um novo diretório para a extensão e cdnele

  4. jpm init
  5. Responder a solicitações com padrões
  6. Substitua seu index.js pelo código fornecido abaixo
  7. jpm run

    Observe que, se jpmnão conseguir encontrar o firefox nos locais padrão, você também precisará passar o sinalizador -b jpmpara indicar onde encontrar seu navegador. (por exemplo jpm run -b /path/to/Firefox/Nightly)

Agora você deve ter o firefox aberto com esta nova extensão carregada e todo o tráfego proxy através do Proxy de compactação de dados do Google Chrome durante esta sessão.

Como jpm runcria um perfil temporário, você precisará jpm rundessa extensão sempre que desejar que seu tráfego seja proxy. Você também pode jpm xpie Install Add-on From Fileno gerenciador de complementos.

Você pode verificar se seus dados estão sendo enviados por proxy examinando os cabeçalhos de resposta do Viacabeçalho, que indica os dados enviados pelo Proxy de compactação do Chrome (por exemplo Via: "1.1 Chrome-Compression-Proxy")

Você pode determinar a quantidade de dados que está salvando comparando o Content-Lengthcabeçalho ao X-Original-Content-Lengthcabeçalho nas respostas do servidor.


O código para index.js é o seguinte:

/*
 * 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
fonte
3
Algo digno de nota é que no ubuntu 14.04 (e o trisquel é uma variante ideologicamente pura nisso, o comando node é nodejs e não node. Eu costumo recomendar uma versão mais recente em um repositório alternativo como resultado - nodesource é o que eu prefiro.
Journeyman Geek
11
Finalmente, ele funciona bem no Abrowser 38 no Trisquel GNU / Linux
Pandya
Você pode me ajudar lá?
Pandya
Use jpm xpipara criar um XPI e instalá-lo.
ssnobody
@ssnobody thanks; você já mencionou na sua resposta, mas eu perdi!
213
7

Agora, há uma extensão do proxy do Google DataSaver para Firefox publicada no site de complementos da Mozilla.

Proxy de compactação de dados do Google para Firefox - habilita o recurso DataSaver para Firefox

galacticninja
fonte
Quem o construiu usou o código que eu publiquei acima, mas fez várias melhorias, como suporte à navegação privada e lista de permissões. Muito agradável!
Ssnobody