Làm cách nào để sử dụng proxy nén dữ liệu của Google trên Firefox?


20

Tôi đang sử dụng GNU Icecat (phiên bản GNU của Mozilla Firefox) trên Trisquel GNU / Linux . Để giảm thiểu / tối ưu hóa việc sử dụng dữ liệu trong khi lướt web, tôi muốn sử dụng proxy nén dữ liệu của Google .

Vậy, làm cách nào để sử dụng Proxy nén dữ liệu của Google trên Firefox?

Lưu ý / Lịch sử: Tôi đã đi lang thang để tìm giải pháp cho vấn đề của mình . Câu trả lời đưa tôi đến một phòng chat , nơi cuối cùng tôi cũng tìm được cách .


1
wiki.mozilla.org/Mobile/Janus Lấy Janus từ github và điều hành dịch vụ của riêng bạn?
ssnobody

code.google.com/p/datacompressionproxy cũng có thể là mã hữu ích ...
ssnobody

1
Lưu ý, trực tiếp đặt proxy HTTP thành nén.googlezip.net: 80 hoặc 74.125.205.211:80 đã kết nối tôi với Proxy nén dữ liệu nhưng tôi không thể tải bất kỳ trang web nào bằng: "Trang này có thể được tải qua Nén dữ liệu Chrome Proxy. Hãy thử tải lại trang. " Tôi cho rằng proxy có thể đang kiểm tra một số tiêu đề dành riêng cho Chrome ...
ssnobody

Có vẻ như tiêu đề cụ thể mà proxy đang tìm kiếm là Chrome-Proxy. Mã để tạo tiêu đề đó một cách chính xác nằm trong background.js trong datacompressionproxy được liên kết ở trên.
ssnobody

Câu trả lời:


19

Sử dụng Proxy nén dữ liệu Google Chrome trên các trình duyệt không phải Chrome bao gồm hai bước.

  1. Đặt proxy HTTP của bạn proxy.googlezip.netvà cổng 80.
  2. Đối với mỗi yêu cầu của bạn, hãy tính toán và đưa Chrome-Proxytiêu đề vào yêu cầu của bạn.

Các Chrome-Proxytiêu đề phải chứa chuỗi sau: ps=<timestamp>-<num1>-<num2>-<num3>, sid=<md5 string>, b=<build>, p=<patch>, c=<platform>Trong đó:

  • dấu thời gian: là số giây hiện tại đã trôi qua kể từ unix epoch
  • num1, num2, num3: là các số ngẫu nhiên có thể được đặt thành 0
  • chuỗi md5: là md5 của chuỗi auth
  • chuỗi xác thực: " <timestamp>" + " <auth key>" + " <timestamp>"
  • khóa xác thực: ac4500dd3b7579186c1b0620614fdb1f7d61f944
  • bản dựng: số bản dựng Chrome, có thể được đặt thành 2214
  • Bản vá: Số bản vá Chrome, có thể được đặt thành 115
  • nền tảng: Nền tảng Chrome, có thể được đặt thành " win"

Như một ví dụ đầy đủ về tiêu đề bạn có thể có: Chrome-Proxy: ps=1439961190-0-0-0, sid=9fb96126616582c4be88ab7fe26ef593, b=2214, p=115, c=win

Bây giờ, để thực hiện điều này một cách thực tế, tôi nghĩ giải pháp đơn giản nhất là sử dụng một phần mở rộng nhưng dường như không có một phần nào cho firefox đã có chức năng này.

Do đó, tôi đã triển khai tiện ích mở rộng firefox của riêng mình cho Firefox phiên bản 38 trở lên cho phép mọi người sử dụng Proxy nén dữ liệu Google Chrome trên firefox và bao gồm cả mã bên dưới.

Sau đây là quy trình mà tôi đã sử dụng để phát triển và thử nghiệm tiện ích mở rộng và sẽ cho phép người khác tạo lại tiện ích mở rộng từ đầu.


  1. Nhận và cài đặt nodejs
  2. Sử dụng npmtừ nodejs để cài đặt jpmquanpm install jpm

    Lưu ý rằng một số phiên bản của gói Ubuntu nodenhư nodejsvì vậy nếu jpmkhông thể tìm thấy nodebạn có thể cần phải cài đặt một phân phối nodejs hoặc tạo liên kết cho nodeđếnnodejs

  3. Tạo một thư mục mới cho phần mở rộng và cdvào nó

  4. jpm init
  5. Trả lời lời nhắc với mặc định
  6. Thay thế index.js của bạn bằng mã được cung cấp dưới đây
  7. jpm run

    Lưu ý rằng nếu jpmkhông thể tìm thấy firefox ở các vị trí tiêu chuẩn, bạn cũng cần chuyển cờ -b jpmđể báo cho nó biết nơi tìm trình duyệt của bạn. (ví dụ jpm run -b /path/to/Firefox/Nightly)

Bây giờ bạn sẽ mở firefox với tiện ích mở rộng mới này được tải và tất cả lưu lượng truy cập được ủy quyền thông qua Proxy nén dữ liệu Google Chrome trong phiên này.

jpm runtạo hồ sơ tạm thời, bạn sẽ cần jpm runtiện ích mở rộng này bất cứ khi nào bạn muốn giao thông của mình được ủy quyền. Bạn cũng có thể jpm xpiInstall Add-on From Filetrong trình quản lý Bổ trợ.

Bạn có thể xác minh rằng dữ liệu của bạn đang được ủy quyền bằng cách kiểm tra các tiêu đề phản hồi cho Viatiêu đề cho biết dữ liệu được gửi qua Proxy nén Chrome (ví dụ Via: "1.1 Chrome-Compression-Proxy")

Bạn có thể xác định số lượng dữ liệu bạn đang lưu bằng cách so sánh Content-Lengthtiêu đề với X-Original-Content-Lengthtiêu đề trong phản hồi của máy chủ.


Mã cho index.js như sau:

/*
 * 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
Điều đáng chú ý là trên Ubuntu 14.04 (và trisquel là một varient tư tưởng thuần túy về vấn đề này, các lệnh nút được nodejs không nút Tôi có xu hướng khuyên bạn sử dụng một phiên bản mới hơn trên một repo thay thế kết quả là -. Nodesource là những gì tôi thích.
Journeyman Geek

1
Cuối cùng, nó hoạt động tốt trên Abrowser 38 trên Trisquel GNU / Linux
Pandya

Bạn có thể giúp tôi ở đó không
Pandya

Sử dụng jpm xpiđể xây dựng XPI và cài đặt nó.
ssnobody

@ssnobody cảm ơn; bạn đã đề cập trong câu trả lời của bạn nhưng tôi đã bỏ lỡ nó!
Pandya

7

Hiện tại đã có proxy Google DataSaver cho tiện ích mở rộng Firefox được đăng trên trang web Tiện ích Mozilla.

Proxy nén dữ liệu của Google cho Firefox - cho phép tính năng DataSaver cho Firefox


Bất cứ ai xây dựng nó đều sử dụng mã tôi đã đăng ở trên nhưng đã thực hiện một số cải tiến như hỗ trợ duyệt web riêng tư và danh sách trắng. Rất đẹp!
ssnobody
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.