2010-11-26 4 views
2

Ich möchte eine kleine Komponente mit XPCOM schreiben, die alle HTTP-Antworten, die vom Browser empfangen werden, schnüffeln kann. Gerade jetzt die einzigen Beispiele, die ich finden kann (wie die unten angehängt) nur erlauben Sie mir die Antwort auf eine Anfrage abzurufen, die ich mich feuern:XPCOM: Sniff HTTP Antworten

var req = new XMLHttpRequest(); 
req.open('GET', 'http://www.mozilla.org/', true); 
req.onreadystatechange = function (aEvt) { 
if (req.readyState == 4) { 
    if(req.status == 200) 
     dump(req.responseText); 
     else 
     dump("Error loading page\n"); 
    } 
}; 

Was ich will, ist für jede HTTP-Antwort, dass der Browser erhält Holen Sie sich die HTTP-Header der entsprechenden Anfrage.

Dank

Antwort

0

Sie alle HTTP-Datenverkehr aus dem Firefox Web-Konsole cribbed über die nsIHttpActivityObserver ein Beispiel schnuppern:

const Cc = Components.classes; 
Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 

XPCOMUtils.defineLazyServiceGetter(this, "activityDistributor", 
             "@mozilla.org/network/http-activity-distributor;1", 
             "nsIHttpActivityDistributor"); 

    let httpTrafficObserver = { 

     /** 
     * Begin observing HTTP traffic that we care about, 
     * namely traffic that originates inside any context that a Heads Up Display 
     * is active for. 
     */ 
     startHTTPObservation: function httpObserverFactory() 
     { 
     // creates an observer for http traffic 
     var self = this; 
     var httpObserver = { 
      observeActivity : 
      function observeActivity(aChannel, 
            aActivityType, 
            aActivitySubtype, 
            aTimestamp, 
            aExtraSizeData, 
            aExtraStringData) 
      { 
      if (aActivityType == 
        activityDistributor.ACTIVITY_TYPE_HTTP_TRANSACTION || 
       aActivityType == 
        activityDistributor.ACTIVITY_TYPE_SOCKET_TRANSPORT) { 

       aChannel = aChannel.QueryInterface(Ci.nsIHttpChannel); 

       let transCodes = this.httpTransactionCodes; 

       if (aActivitySubtype == 
        activityDistributor.ACTIVITY_SUBTYPE_REQUEST_HEADER) { 

       let httpActivity = { 
        url: aChannel.URI.spec, 
        method: aChannel.requestMethod, 
        channel: aChannel 
       }; 

       } 
      } 
      }, 

      httpTransactionCodes: { 
      0x5001: "REQUEST_HEADER", 
      0x5002: "REQUEST_BODY_SENT", 
      0x5003: "RESPONSE_START", 
      0x5004: "RESPONSE_HEADER", 
      0x5005: "RESPONSE_COMPLETE", 
      0x5006: "TRANSACTION_CLOSE", 

      0x804b0003: "STATUS_RESOLVING", 
      0x804b0007: "STATUS_CONNECTING_TO", 
      0x804b0004: "STATUS_CONNECTED_TO", 
      0x804b0005: "STATUS_SENDING_TO", 
      0x804b000a: "STATUS_WAITING_FOR", 
      0x804b0006: "STATUS_RECEIVING_FROM" 
      } 
     }; 

     this.httpObserver = httpObserver; 

     activityDistributor.addObserver(httpObserver); 
     } 

    }; 

und http://mxr.mozilla.org/mozilla-central/source/netwerk/protocol/http/nsIHttpActivityObserver.idl