Как я могу создать оболочку / прокси XMLHttpRequest? - PullRequest
7 голосов
/ 26 января 2011

Эти методы, которые приходят на ум, каковы плюсы и минусы каждого?

Метод 1: Дополнить собственный экземпляр

var _XMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function() {
    var xhr = new _XMLHttpRequest();

    // augment/wrap/modify here
    var _open = xhr.open;
    xhr.open = function() {
        // custom stuff
        return _open.apply(this, arguments);
    }

    return xhr;
}

Способ 2: собственный подкласс "класса" XMLHttpRequest

var _XMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function() {
    // definePropertys here etc
}

XMLHttpRequest.prototype = new _XMLHttpRequest());
// OR
XMLHttpRequest.prototype = Object.create(_XMLHttpRequest);

// custom wrapped methods on prototype here
XMLHttpRequest.prototype.open = function() {
    // custom stuff
    return _XMLHttpRequest.prototype.open.apply(this, arguments);
}

Метод 3: Полный прокси для собственного XMLHttpRequest

var _XMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function() {
    this.xhr = new _XMLHttpRequest();
}

// proxy ALL methods/properties
XMLHttpRequest.prototype.open = function() {
    // custom stuff
    return this.xhr.open.apply(this.xhr, arguments);
}

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

В зависимости от механизма JS метод 1 приводит к значительным накладным расходам, поскольку xhr.open переопределяется всякий раз, когда создается экземпляр XHR.

Метод 2 заставляет меня задуматься «зачем вам сначала нужен new _XMLHttpRequest»«?Есть незначительное чувство нежелательных побочных эффектов, но, похоже, он работает просто отлично.

Метод 3: простой, старая школа, но он не сработает сразу.(Подумайте о свойствах чтения)

В общем, я лично неохотно перезаписываю объекты браузера, так что это будет большим плюсом для всех трех методов.Лучше использовать другую переменную, такую ​​как ProxyXHR (только мои 2 цента)

0 голосов
/ 27 февраля 2017

Используйте приведенную ниже конфигурацию

_XMLHTTPRequest.setProxy(proxySetting, varProxyServer, varBypassList);

Параметры: подробности: proxySetting - конфигурация прокси, например: SXH_PROXY_SET_DEFAULT, SXH_PROXY_SET_DIRECT, SXH_PROXY_SET_PROXY, SX_S_RX * * * * * * * * *прокси-сервер

varBypassList - имена хостов или IP-адреса, для которых вы хотите разрешить обход прокси-сервера.

0 голосов
/ 05 июля 2014

Может зависеть от варианта использования. В моем случае я хотел создать полный прокси-сервер, который представляется возможным только с третьим методом. Проблема в том, что onreadystatechange должен быть установлен в исходной реализации XHR. Я предполагаю, что определены методы получения и установки, которые нельзя изменить извне.

Из-за этого метода 1 и 2 не будут работать. Чтобы добиться этого, я написал полный текст, то есть я не нашел никаких ошибок, прокси для XHR здесь: A: Как я могу перехватить и обработать данные из ответов XHR, используя casperjs? . Это нужно сделать по методу 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...