【问题标题】:getting HTTP response headers with getAllResponseHeaders使用 getAllResponseHeaders 获取 HTTP 响应标头
【发布时间】:2013-09-07 23:29:38
【问题描述】:

每次访问某个网站时,我都会尝试获取 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"

我是不是走错了路,操作比看起来更复杂?这是针对 android 的 firefox 的扩展,我没有使用 sdk。感谢您的帮助。

【问题讨论】:

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


    【解决方案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";
      });
    }
    

    【讨论】:

    • 感谢 nmaier,你是最棒的。
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2016-09-21
    • 2017-11-06
    • 1970-01-01
    • 2012-04-21
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多