Как перехватить AJAX-вызов и изменить целевой хост перед его отправкой - PullRequest
0 голосов
/ 10 января 2019

Чтобы перехватить нативные вызовы ajax, я нашел следующий фрагмент, который отлично работает

(function(XHR) {
    "use strict";

    var open = XHR.prototype.open;
    var send = XHR.prototype.send;

    XHR.prototype.open = function(method, url, async, user, pass) {
        this._url = url;
        open.call(this, method, url, async, user, pass);
    };

    XHR.prototype.send = function(data) {
        var self = this;
        var oldOnReadyStateChange;
        var url = this._url;
        console.log(url);

        function onReadyStateChange() {
            if(self.readyState == 4 /* complete */) {
                /* This is where you can put code that you want to execute post-complete*/
                /* URL is kept in this._url */
            }

            if(oldOnReadyStateChange) {
                oldOnReadyStateChange();
            }
        }

        /* Set xhr.noIntercept to true to disable the interceptor for a particular call */
        if(!this.noIntercept) {            
            if(this.addEventListener) {
                this.addEventListener("readystatechange", onReadyStateChange, false);
            } else {
                oldOnReadyStateChange = this.onreadystatechange; 
                this.onreadystatechange = onReadyStateChange;
            }
        }

        send.call(this, data);
    }
})(XMLHttpRequest);

Но я хочу изменить целевой хост, поэтому вместо того, чтобы запускать эти запросы ajax на текущем веб-сайте, я хочу вместо этого перенаправить их на другой сайт.

Я попытался this.setRequestHeader('Host', 'example.com');, но я получил сообщение об ошибке в консоли, сообщающее, что я пытаюсь установить запрещенный заголовок.

На самом деле я мог бы сделать еще один запрос ajax, но мне было бы гораздо удобнее просто переключать хосты.

Спасибо

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