nsIUploadChannel - соединение было сброшено - PullRequest
0 голосов
/ 06 сентября 2011

Я пытаюсь сохранить данные поста в локальном файле.Но если я это сделаю, в браузере я вижу

Соединение было сброшено Соединение с сервером было сброшено во время загрузки страницы.Сайт может быть временно недоступен или слишком занят.Попробуйте еще раз через несколько минут.Если вы не можете загрузить какие-либо страницы, проверьте сетевое подключение вашего компьютера.Если ваш компьютер или сеть защищены брандмауэром или прокси-сервером, убедитесь, что Firefox разрешен доступ к сети.

Мой код:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="yourwindow" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

 <script>
<![CDATA[
var MIKI =
{
 observe: function(subject, topic, data) 
 {
  if (topic == "http-on-modify-request") 
  {
   var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
   if(httpChannel.requestMethod == "POST"){
   var uploadChannel = httpChannel.QueryInterface(Components.interfaces.nsIUploadChannel);
   var uploadChannelStream = uploadChannel.uploadStream;
   uploadChannelStream.QueryInterface(Components.interfaces.nsISeekableStream);                 
   uploadChannelStream.seek(0,0);                               
   var stream = Components.classes['@mozilla.org/scriptableinputstream;1'].createInstance(Components.interfaces.nsIScriptableInputStream);
   stream.init(uploadChannelStream);
   var data = stream.read(stream.available());
   data = data.split(/\r\n\r\n/).slice(1).join('\r\n\r\n');
   var buffer = httpChannel.URI.spec + " " + data+ "\n";
   if(data != '') fos.write(buffer, buffer.length);
  }
 }
} 
};
var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("Desk", Components.interfaces.nsIFile);
file.append("http-request-log.txt");
var fos = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
fos.init(file, 0x02 | 0x08 | 0x10, -1, 0); 
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(MIKI, "http-on-modify-request", false);    
]]>
</script>
</window>

Что я делаюне так?

1 Ответ

1 голос
/ 06 сентября 2011

Поскольку вы читаете данные из потока выгрузки, чтобы записать их в файл, вы, вероятно, оставляете указатель потока в конце (поэтому, когда происходит запрос, похоже, что тело POST пусто). Попытайтесь вернуться к началу потока, как только вы закончите чтение данных.

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