Jak korzystać z proxy kompresji danych Google w przeglądarce Firefox?

20

Używam GNU Icecat (wersja GNU Mozilla Firefox) na Trisquel GNU / Linux . Aby zminimalizować / zoptymalizować wykorzystanie danych podczas surfowania po Internecie, chcę użyć serwera proxy kompresji danych Google .

Jak więc korzystać z serwera proxy kompresji danych Google w przeglądarce Firefox?

Notatka / Historia: Wędrowałem, żeby znaleźć rozwiązanie mojego problemu . Odpowiedzi doprowadziły mnie do chat-room , gdzie w końcu znaleźć drogę .

Pandya
źródło
1
wiki.mozilla.org/Mobile/Janus Grab Janus z github i uruchom własną usługę?
ssnobody
code.google.com/p/datacompressionproxy Może być także przydatny kod ...
ssnobody
1
Uwaga: bezpośrednie ustawienie proxy HTTP na kompresję.googlezip.net:80 lub 74.125.205.211:80 połączyło mnie z serwerem proxy kompresji danych, ale nie mogłem załadować żadnych witryn za pomocą: „Nie można załadować tej strony za pomocą kompresji danych Chrome Proxy. Spróbuj ponownie załadować stronę. ”
Podejrzewam,
Wygląda na to, że konkretny nagłówek, którego szuka proxy, to Chrome-Proxy. Kod do prawidłowego generowania tego nagłówka znajduje się w pliku background.js w połączeniu z serwerem kompresji danych połączonym powyżej.
ssnobody

Odpowiedzi:

19

Korzystanie z serwera proxy kompresji danych Google Chrome w przeglądarkach innych niż Chrome wymaga dwóch kroków.

  1. Ustaw serwer proxy HTTP na proxy.googlezip.neti port 80.
  2. Dla każdego żądania oblicz i wstaw Chrome-Proxynagłówek do swojego żądania.

Chrome-ProxyNagłówek powinien zawierać następujący ciąg: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>gdzie:

  • znacznik czasu: jest bieżącą liczbą sekund, które upłynęły od epoki Uniksa
  • num1, num2, num3: są liczbami losowymi, które można ustawić na 0
  • ciąg md5: jest to md5 ciągu auth
  • ciąg auth: „ <timestamp>” + „ <auth key>” + „ <timestamp>
  • klucz autoryzujący: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • kompilacja: numer kompilacji Chrome, można ustawić na 2214
  • Łata: Numer łaty Chrome, można ustawić na 115
  • platforma: platforma Chrome, można ustawić „ win

Jako pełny przykład nagłówka możesz mieć: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Teraz, aby wdrożyć to praktycznie, myślę, że najłatwiejszym rozwiązaniem jest użycie rozszerzenia, ale wydaje się, że nie ma takiego dla firefoxa, który ma już tę funkcjonalność.

Dlatego wdrożyłem własne rozszerzenie firefox dla przeglądarki Firefox w wersji 38 lub nowszej, które pozwala każdemu używać serwera proxy kompresji danych Google Chrome na Firefox i dołączam poniższy kod.

Oto procedura, której użyłem do opracowania i przetestowania rozszerzenia i pozwoliłby innym na jego regenerację od zera.


  1. Pobierz i zainstaluj nodejs
  2. Użyj npmz nodejs, aby zainstalować jpmprzeznpm install jpm

    Zauważ, że niektóre wersje pakietu Ubuntu nodejak nodejswięc jeśli jpmnie możesz znaleźć nodemoże trzeba zainstalować inną dystrybucję nodejs lub utwórz link nodedonodejs

  3. Utwórz nowy katalog dla rozszerzenia i cddo niego

  4. jpm init
  5. Odpowiedz na pytania z domyślnymi ustawieniami
  6. Zamień plik index.js na kod podany poniżej
  7. jpm run

    Pamiętaj, że jeśli jpmnie można znaleźć Firefoxa w standardowych lokalizacjach, musisz również przekazać flagę -b, jpmaby poinformować go, gdzie ma znaleźć swoją przeglądarkę. (np. jpm run -b /path/to/Firefox/Nightly)

Powinieneś teraz otworzyć Firefoksa z załadowanym nowym rozszerzeniem i całym ruchem proxy za pośrednictwem serwera proxy kompresji danych Google Chrome podczas tej sesji.

Ponieważ jpm runtworzy profil tymczasowy, będziesz potrzebować jpm runtego rozszerzenia za każdym razem, gdy chcesz, aby Twój ruch był proxy. Możesz także jpm xpiiw Install Add-on From FileMenedżerze dodatków.

Możesz sprawdzić, czy Twoje dane są proxy, sprawdzając nagłówki odpowiedzi dla Vianagłówka, który wskazuje, że dane są przesyłane przez serwer proxy kompresji Chrome (np. Via: "1.1 Chrome-Compression-Proxy")

Możesz określić, ile danych zapisujesz, porównując Content-Lengthnagłówek z X-Original-Content-Lengthnagłówkiem w odpowiedziach serwera.


Kod dla index.js wygląda następująco:

/*
 * 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
źródło
3
Warto zauważyć, że w Ubuntu 14.04 (i trisquel jest ideologicznie czystą odmianą, polecenie węzła to nodejs, a nie węzeł. W związku z tym zalecam używanie nowszej wersji na alternatywnym repozytorium - preferuję nodesource.
Journeyman Geek
1
Wreszcie działa dobrze na Abrowser 38 na Trisquel GNU / Linux
Pandya
Czy możesz mi tam
Pandya
Użyj, jpm xpiaby zbudować XPI i zainstalować go.
ssnobody
@ssnobody dzięki; już wspomniałeś w swojej odpowiedzi, ale mi tego brakowało!
Pandya,
7

W witrynie dodatków Mozilla znajduje się teraz proxy Google DataSaver dla rozszerzenia Firefox .

Serwer proxy kompresji danych Google dla przeglądarki Firefox - włącza funkcję DataSaver dla przeglądarki Firefox

galacticninja
źródło
Ktokolwiek go zbudował, użył kodu, który opublikowałem powyżej, ale wprowadził kilka ulepszeń, takich jak obsługa przeglądania prywatnego i biała lista. Bardzo dobrze!
ssnobody