Bagaimana cara menggunakan proksi kompresi data Google di Firefox?


20

Saya menggunakan GNU Icecat (versi GNU Mozilla Firefox) di Trisquel GNU / Linux . Untuk meminimalkan / mengoptimalkan penggunaan data saat menjelajahi web, saya ingin menggunakan proksi kompresi data Google .

Jadi, bagaimana cara saya menggunakan Proxy Kompresi Data Google di Firefox?

Catatan / Sejarah: Saya berkeliling untuk mendapatkan solusi untuk masalah saya . The Answer membawa saya ke sebuah obrolan-ruang , di mana saya akhirnya menemukan cara .


1
wiki.mozilla.org/Mobile/Janus Raih Janus dari github dan jalankan layanan Anda sendiri?
ssnobody

code.google.com/p/datacompressionproxy Mungkin juga kode yang berguna ...
ssnobody

1
Sebagai catatan, langsung mengatur proxy HTTP ke compress.googlezip.net:80 atau 74.125.205.211:80 menghubungkan saya ke Proxy Kompresi Data tetapi saya tidak dapat memuat situs apa pun dengan: "Halaman ini tidak dapat dimuat melalui Kompresi Data Chrome Proxy. Coba muat ulang halaman. " Saya kira proxy dapat memeriksa beberapa header khusus Chrome ...
ssnobody

Sepertinya header spesifik yang dicari proxy adalah Chrome-Proxy. Kode untuk menghasilkan header itu dengan benar ada di dalam background.js di datacompressionproxy yang ditautkan di atas.
ssnobody

Jawaban:


19

Menggunakan Proxy Kompresi Data Google Chrome pada browser non-Chrome melibatkan dua langkah.

  1. Setel proxy proxy.googlezip.netdan port HTTP Anda 80.
  2. Untuk setiap permintaan Anda, hitung dan Chrome-Proxymasukkan header ke dalam permintaan Anda.

The Chrome-Proxyheader harus berisi string berikut: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>di mana:

  • timestamp: adalah jumlah detik saat ini berlalu sejak zaman unix
  • num1, num2, num3: adalah angka acak yang dapat diatur ke 0
  • string md5: adalah md5 dari string auth
  • string auth: " <timestamp>" + " <auth key>" + " <timestamp>"
  • kunci auth: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • build: nomor build Chrome, dapat diatur ke 2214
  • tambalan: nomor tambalan Chrome, dapat diatur ke 115
  • platform: platform Chrome, dapat disetel ke " win"

Sebagai contoh lengkap dari tajuk yang mungkin Anda miliki: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Sekarang, untuk mengimplementasikan ini secara praktis, saya pikir solusi termudah adalah dengan menggunakan ekstensi tetapi tampaknya tidak ada satu untuk firefox yang sudah memiliki fungsi ini.

Oleh karena itu, saya telah menerapkan ekstensi firefox saya sendiri untuk Firefox versi 38 atau lebih yang memungkinkan siapa saja untuk menggunakan Proxy Kompresi Data Google Chrome di firefox dan saya termasuk kode di bawah ini.

Berikut ini adalah prosedur yang saya gunakan untuk mengembangkan dan menguji ekstensi, dan akan memungkinkan orang lain untuk meregenerasi ekstensi dari awal.


  1. Dapatkan dan instal nodejs
  2. Gunakan npmdari nodejs untuk menginstal jpmvianpm install jpm

    Perhatikan bahwa beberapa versi dari paket Ubuntu nodesebagai nodejsjadi jika jpmtidak dapat menemukan nodeAnda mungkin perlu menginstal distribusi lain nodejs atau membuat link untuk nodekenodejs

  3. Buat direktori baru untuk ekstensi dan cdmasuk ke dalamnya

  4. jpm init
  5. Tanya diminta dengan default
  6. Ganti index.js Anda dengan kode yang disediakan di bawah ini
  7. jpm run

    Perhatikan bahwa jika jpmtidak dapat menemukan firefox di lokasi standar, Anda juga harus melewati tanda -b jpmuntuk memberi tahu tempat menemukan browser Anda. (mis. jpm run -b /path/to/Firefox/Nightly)

Anda sekarang harus memiliki firefox terbuka dengan ekstensi baru ini dimuat dan semua lalu lintas diproksi melalui Proxy Kompresi Data Google Chrome selama sesi ini.

Karena jpm runmembuat profil sementara, Anda perlu jpm runekstensi ini kapan saja Anda ingin traffic Anda diproksi. Anda juga bisa jpm xpidan Install Add-on From Filedi Add-On manager.

Anda dapat memverifikasi bahwa data Anda sedang diproksikan dengan memeriksa tajuk respons untuk Viatajuk yang menunjukkan data yang dikirim melalui Proksi Kompresi Chrome (mis. Via: "1.1 Chrome-Compression-Proxy")

Anda dapat menentukan berapa banyak data yang Anda simpan dengan membandingkan Content-Lengthtajuk dengan X-Original-Content-Lengthtajuk dalam respons server.


Kode untuk index.js berikut:

/*
 * 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
Sesuatu yang perlu dicatat adalah bahwa pada ubuntu 14.04 (dan trisquel adalah varian murni ideologis tentang ini, perintah node adalah nodejs bukan node. Saya cenderung merekomendasikan menggunakan versi yang lebih baru pada repo alternatif sebagai hasilnya - nodesource adalah yang saya sukai.
Journeyman Geek

1
Akhirnya ia berfungsi dengan baik pada Abrowser 38 di Trisquel GNU / Linux
Pandya

Dapatkah Anda membantu saya di sana
Pandya

Gunakan jpm xpiuntuk membangun XPI dan menginstalnya.
ssnobody

@ssnobody terima kasih; Anda telah menyebutkan jawaban Anda tetapi saya melewatkannya!
Pandya

7

Sekarang ada proxy Google DataSaver untuk ekstensi Firefox yang diposting di situs web Mozilla Add-ons.

Proxy kompresi data Google untuk Firefox-mengaktifkan fitur DataSaver untuk Firefox


Siapa pun yang membangunnya menggunakan kode yang saya posting di atas tetapi membuat beberapa perbaikan seperti dukungan penelusuran pribadi dan daftar putih. Sangat bagus!
ssnobody
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.