--- title: HTTP アクティビティのモニタリング slug: orphaned/Monitoring_HTTP_activity original_slug: Monitoring_HTTP_activity ---

 {{ gecko_minversion_header("1.9.2") }}

Gecko は {{ interface("nsIHttpActivityObserver") }} インターフェースを含んでおり、コールバックを受け取る形でHTTPトランザクションをリアルタイムにモニタすることができます。

HTTP activity observer を作る

HTTP上のアクティビティを観察するには、コード内で {{ interface("nsIHttpActivityObserver") }} を実装する必要があります。このインターフェースはとても単純で、 {{ ifmethod("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 を実際に組み込む必要があります。これは {{ interface("nsIHttpActivityDistributor") }} の{{ ifmethod("nsIHttpActivityDistributor", "addObserver") }} メソッドを用いて行います:

var activityDistributor = Components.classes["@mozilla.org/network/http-activity-distributor;1"]
                                    .getService(Components.interfaces.nsIHttpActivityDistributor);
activityDistributor.addObserver(httpObserver);

アクティビティを観察する

観察可能なクラスは2つあります: ソケットレベルで発生するものと、HTTPトランザクションレベルで発生するものです。

観察可能なソケットのアクティビティ

{{ interface("nsIHttpActivityDistributor") }} メソッドに報告されアクティビティが ACTIVITY_TYPE_SOCKET_TRANSPORT の場合、発生したアクティビティの詳細な型を示すアクティビティサブタイプは socket transport status code となります。

観察可能な HTTP のアクティビティ

アクティビティタイプ が ACTIVITY_TYPE_HTTP_TRANSACTION の場合、アクティビティサブタイプは activity subtype 定数 のうちの1つとなります。これらは送信されるHTTPリクエストヘッダやボディ、受信するHTTPヘッダなどを含むHTTPトランザクション全体を観察するための機能も含みます。

参照