Firefox addon перехватывает и изменяет данные POST и получает URL - PullRequest
2 голосов
/ 23 декабря 2011

Я пытаюсь получить URL каждого запроса POST, прочитать данные POST, а затем изменить его (например, с заменой).Код, который у меня есть, выдает ошибку: stringStream is not defined, что правильно, так что нужно определить, чтобы получить метод setData ()?Часть кода изначально написана на SO.Кроме того, как я могу получить URL-адрес, на который он публикует?

//create an nsIObserver implementor
var listener = {
   observe : function(aSubject, aTopic, aData) {
      var httpChannel = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);


          if (aTopic == "http-on-modify-request") {

            var channel= aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);

            if(channel.requestMethod == "POST")
            {

                channel=channel.QueryInterface(Components.interfaces.nsIUploadChannel);  
                channel = channel.uploadStream;  
                channel.QueryInterface(Components.interfaces.nsISeekableStream)
                                .seek(Components.interfaces.nsISeekableStream.NS_SEEK_SET, 0);  
                var stream = Components.classes["@mozilla.org/binaryinputstream;1"]
                                .createInstance(Components.interfaces.nsIBinaryInputStream);  
                stream.setInputStream(channel);  
                var postBytes = stream.readByteArray(stream.available());  
                poststr = String.fromCharCode.apply(null, postBytes);  

                //change the poststr

                // poststr=poststr.replace(....);  

                // ERROR HERE - stringStream is not defined
                stringStream.setData(poststr, poststr.length);  
                //changing the postdata  
                channel = channel.QueryInterface(Components.interfaces.nsIUploadChannel);  
                channel = channel.uploadStream;  
                channel = channel.QueryInterface(Components.interfaces.nsISeekableStream)
                          .seek(Components.interfaces.nsISeekableStream.NS_SEEK_SET, 0);  
                channel.uploadStream.QueryInterface(Components.interfaces.nsIMIMEInputStream);  
                channel.uploadStream.setData(stringStream);  
                channel.requestMethod = "POST";

            }

          }

   },

   QueryInterface : function(aIID) {
      if (aIID.equals(Components.interfaces.nsISupports) ||
            aIID.equals(Components.interfaces.nsIObserver))
         return this;
      throw Components.results.NS_NOINTERFACE;
   }
};

var observerService = null;

var Init = {
   addObserver : function(){
      observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
      observerService.addObserver(listener, "http-on-modify-request", false);
   },

   removeObserver : function(){
      observerService.removeObserver(listener, "http-on-modify-request");
   }
};

Init.addObserver();

1 Ответ

2 голосов
/ 06 марта 2012

см. Создание HTTP POST , чтобы узнать, как это сделать правильно.

  1. stringStream не определено нигде в вашем коде, поэтому поместите объявление var или около того.
  2. inputStream.setData(postData, postData.length), пожалуйста, обратитесь к nsInputStrem для получения дополнительной информации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...