Установите прокси для XMLHttpRequest для редактирования данных формы - PullRequest
0 голосов
/ 20 ноября 2018

Как мне отредактировать все POST-запросы от клиента?Мои исследования говорят, что это возможно с прокси-объектом в XMLHttpRequest.Как я могу проверить POST-запрос и отредактировать данные формы до того, как они будут отправлены на сервер?

Я пробовал такой подход, но отправка данных - это просто ответы.

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;
}

1 Ответ

0 голосов
/ 20 ноября 2018

Вот IIFE, которое перегружает методы-прототипы XMLHttpRequest, что позволит вам перехватывать и изменять отправляемые данные.Я оставлю это на ваше усмотрение, чтобы разобраться в разборе ваших данных

(function(xhr) {
  var
    proto = xhr.prototype,
    _send = proto.send,
    _open = proto.open;
  
  // overload open() to access url and request method
  proto.open = function() {
    // store type and url to use in other methods
    this._method = arguments[0];
    this._url = arguments[1];
    _open.apply(this, arguments);
  }
  
  // overload send to intercept data and modify
  proto.send = function() {
   // using properties stored in open()
    if (this._method.toLowerCase() === 'post') {
      console.log('USERS DATA :: ', arguments[0]);
      console.log('URL :: ', this._url);
      
      // modify data to send
      arguments[0] = 'item=beer&id=3';
    }
    _send.apply(this, arguments);
  }

})(XMLHttpRequest);

// use jQuery ajax to demonstrate
$.post('http://httpbin.org/post', { item: 'test',  id: 2})
      .then(data => console.log('RESPONSE ::', data.form))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...