Gecko は nsIHttpActivityObserver
インターフェースを含んでおり、コールバックを受け取る形でHTTPトランザクションをリアルタイムにモニタすることができます。
HTTP activity observer を作る
HTTP上のアクティビティを観察するには、コード内で nsIHttpActivityObserver
を実装する必要があります。このインターフェースはとても単純で、 nsIHttpActivityObserver.observeActivity()
という1つのメソッドを実装するだけです。このメソッドはHTTPチャンネルで対象となるアクションが発生するごとに呼び出されます。
// インターフェースへの参照を定義する
var nsIHttpActivityObserver = Components.interfaces.nsIHttpActivityObserver;
var httpObserver =
{
observeActivity: function(aHttpChannel, aActivityType, aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData)
{
if (aActivityType == nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION) {
switch(aActivitySubtype) {
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_HEADER:
// received response header
break;
case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
// received complete HTTP response
break;
}
}
}
};
次に、activity observer を実際に組み込む必要があります。これは nsIHttpActivityDistributor
のnsIHttpActivityDistributor.addObserver()
メソッドを用いて行います:
var activityDistributor = Components.classes["@mozilla.org/network/http-activity-distributor;1"] .getService(Components.interfaces.nsIHttpActivityDistributor); activityDistributor.addObserver(httpObserver);
アクティビティを観察する
観察可能なクラスは2つあります: ソケットレベルで発生するものと、HTTPトランザクションレベルで発生するものです。
観察可能なソケットのアクティビティ
nsIHttpActivityDistributor
メソッドに報告された
アクティビティが ACTIVITY_TYPE_SOCKET_TRANSPORT
の場合、発生したアクティビティの詳細な型を示すアクティビティサブタイプは socket transport status code となります。
観察可能な HTTP のアクティビティ
アクティビティタイプ が ACTIVITY_TYPE_HTTP_TRANSACTION の場合
、アクティビティサブタイプは activity subtype 定数 のうちの1つとなります。これらは送信されるHTTPリクエストヘッダやボディ、受信するHTTPヘッダなどを含むHTTPトランザクション全体を観察するための機能も含みます。