使用getAllResponseHeaders获取HTTP响应头

时间:2013-09-07 23:29:38

标签: android http-headers firefox-addon firefox-addon-sdk observers

我每次访问某个网站时都试图获取http响应标头。我认为使用像下面这样的观察者就足够了:

const OBS = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService); 
let httpRequestObserver ={ 
      observe: function(subject, topic, data){
          var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
        if (topic == "http-on-examine-response") {
          headers=httpChannel.getAllResponseHeaders();  
        }
      }
    };

在启动方法中我添加它然后在关机中删除它:

OBS.addObserver(httpRequestObserver, "http-on-examine-response", false);//startup methode

OBS.addObserver(httpRequestObserver, "http-on-examine-response", false);//shutdown

但是我在日志中得到了这个:

JavaScript Error: "httpChannel.getAllResponseHeaders is not a function"

我采取了错误的方式,操作比看起来更复杂吗?这是为Firefox的Firefox扩展,我不使用sdk。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

nsIHttpChannel不是XMLHttpRequest。相反,XMLhttpRequest是一个围绕频道的不错的包装类 - 不仅仅是http代码 - 它还增加了诸如getAllResponseHeaders()之类的便利功能。

您可以使用nsIHttpChannel.visitResponseHeaders来模拟getAllResponseHeaders

if (subject instanceof Ci.nsIHttpChannel) {
  var headers = "";
  subject.visitResponseHeaders(function(header, value) {
    headers += header + ": " + value + "\r\n";
  });
}