Wie verwende ich den Google-Proxy für Datenkomprimierung in Firefox?


20

Ich benutze GNU Icecat (GNU-Version von Mozilla Firefox) unter Trisquel GNU / Linux . Um die Datennutzung beim Surfen im Internet zu minimieren / optimieren, möchte ich den Datenkomprimierungs-Proxy von Google verwenden .

Wie verwende ich Google Data Compression Proxy in Firefox?

Anmerkung / Verlauf: Ich war auf der Suche nach einer Lösung für mein Problem . Die Antwort brachte mich in einen Chatroom , wo ich endlich einen Weg fand .


1
wiki.mozilla.org/Mobile/Janus Schnapp dir Janus von Github und betreibe deinen eigenen Service?
SSNOBODY


1
Hinweis: Durch das direkte Festlegen des HTTP-Proxys auf compress.googlezip.net:80 oder 74.125.205.211:80 wurde eine Verbindung zum Datenkomprimierungs-Proxy hergestellt. Es konnten jedoch keine Websites geladen werden mit: "Diese Seite kann nicht über die Chrome-Datenkomprimierung geladen werden Proxy. Versuchen Sie, die Seite neu zu laden. " Ich nehme an, der Proxy könnte nach Chrome-spezifischen
Headern suchen

Es sieht so aus, als wäre der spezifische Header, nach dem der Proxy sucht, Chrome-Proxy. Der Code zum korrekten Generieren dieses Headers befindet sich in background.js im oben verlinkten Datenkomprimierungsproxy.
SSNOBODY

Antworten:


19

Das Verwenden des Google Chrome-Datenkomprimierungs-Proxys in Browsern, die nicht von Chrome stammen, umfasst zwei Schritte.

  1. Stellen Sie Ihren HTTP-Proxy auf proxy.googlezip.netund Port ein 80.
  2. Berechnen Sie für jede Ihrer Anforderungen einen Chrome-ProxyHeader und fügen Sie ihn in Ihre Anforderung ein.

Der Chrome-ProxyHeader sollte die folgende Zeichenfolge enthalten: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>where:

  • timestamp: ist die aktuelle Anzahl von Sekunden, die seit der Unix-Epoche vergangen sind
  • num1, num2, num3: sind Zufallszahlen, die eingestellt werden können 0
  • md5 string: ist das md5 des auth-strings
  • auth string: " <timestamp>" + " <auth key>" + " <timestamp>"
  • Authentifizierungsschlüssel: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • build: Chrome Build-Nummer, kann eingestellt werden auf 2214
  • Patch: Chrome-Patch-Nummer, kann auf eingestellt werden 115
  • Plattform: Chrome-Plattform, kann auf " win" gesetzt werden

Als vollständiges Beispiel für den Header können Sie Folgendes haben: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Um dies praktisch umzusetzen, ist es meiner Meinung nach am einfachsten, eine Erweiterung zu verwenden, aber es scheint keine für Firefox zu geben, die diese Funktionalität bereits bietet.

Daher habe ich meine eigene Firefox-Erweiterung für Firefox Version 38 oder höher implementiert, mit der jeder den Google Chrome-Datenkomprimierungs-Proxy für Firefox verwenden kann. Der folgende Code ist enthalten.

Das Folgende ist die Prozedur, die ich zum Entwickeln und Testen der Erweiterung verwendet habe und die es anderen ermöglichen würde, die Erweiterung von Grund auf neu zu generieren.


  1. Holen und installieren nodejs
  2. Verwenden Sie npmfrom nodejs, um jpmvia zu installierennpm install jpm

    Beachten Sie, dass einige Versionen von Ubuntu - Paket nodeals nodejsdann , wenn er jpmnicht finden können nodeSie eine andere Verteilung von NodeJS installieren müssen oder einen Link erstellen für nodezunodejs

  3. Erstellen Sie ein neues Verzeichnis für die Erweiterung und cdhinein

  4. jpm init
  5. Beantworten Sie Eingabeaufforderungen mit Standardeinstellungen
  6. Ersetzen Sie Ihre index.js durch den unten angegebenen Code
  7. jpm run

    Beachten Sie, dass Sie, wenn jpmFirefox an den Standardstandorten nicht gefunden werden kann, auch das Flag -b übergeben müssen, um anzugeben jpm, wo sich Ihr Browser befindet. (zB jpm run -b /path/to/Firefox/Nightly)

Sie sollten jetzt Firefox geöffnet haben, wobei diese neue Erweiterung geladen und der gesamte Datenverkehr während dieser Sitzung über den Google Chrome-Datenkomprimierungsproxy weitergeleitet wird.

Da jpm runein temporäres Profil erstellt wird, benötigen Sie jpm rundiese Erweiterung, wenn Sie möchten, dass Ihr Datenverkehr als Proxy fungiert. Sie können auch jpm xpiund Install Add-on From Filein Add-On-Manager.

Sie können überprüfen, ob Ihre Daten als Proxy fungieren, indem Sie die Antwortheader auf den ViaHeader untersuchen, der angibt, dass Daten über den Chrome Compression Proxy gesendet werden (z. B. Via: "1.1 Chrome-Compression-Proxy").

Sie können bestimmen, wie viele Daten Sie speichern, indem Sie den Content-LengthHeader mit dem X-Original-Content-LengthHeader in den Serverantworten vergleichen.


Code für index.js folgt:

/*
 * 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
Etwas erwähnenswert ist , dass auf Ubuntu 14.04 (und trisquel ist ein ideologisch reiner varient auf diesem, der Knoten Befehl NodeJS nicht Knotet Ich neige dazu , mit einer neueren Version auf einem anderen Repo als Ergebnis zu empfehlen -. Nodesource ist , was ich bevorzuge.
Gesellen-Aussenseiter

1
Schließlich funktioniert es gut auf Abrowser 38 unter Trisquel GNU / Linux
Pandya

Können Sie mir dort
Pandya

Verwenden Sie jpm xpidiese Option, um ein XPI zu erstellen und zu installieren.
SSNOBODY

@ssnobody danke; Sie haben bereits in Ihrer Antwort erwähnt, aber ich habe es verpasst!
Pandya

7

Es gibt jetzt einen Google DataSaver-Proxy für die Firefox- Erweiterung, der auf der Mozilla Add-ons-Website veröffentlicht ist.

Google-Datenkomprimierungsproxy für Firefox: Aktiviert die DataSaver-Funktion für Firefox


Wer auch immer es erstellte, verwendete den Code, den ich oben gepostet hatte, nahm jedoch einige Verbesserungen vor, wie z. B. Unterstützung für privates Surfen und Whitelisting. Sehr schön!
SSNOBODY
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.