Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
WinHTTP (Windows HTTP Services) 覚書
by kanegon
2003.05.05 create
- 概要
WinHTTP は HTTP の高レベルインタフェースを提供する。WinHTTP は主にサーバ間の
HTTP 通信のために設計されたが、サーバに限らず、クライアントでも使用可能なもの
となっている。
従来の技術である WinINet では主に HTTP クライアント機能を持つ対話的なデスクトッ
プアプリケーションをターゲットして設計され、ユーザ認証などいくつかの操作で使
用される GUI を内包していた。
WinHTTP では GUI を想定せず、これらの操作をすべてプログラムで処理する。
WinHTTP は WinINet に比べて、より安全で強固であり、HTTP クライアントサービス
を必要とするサーバアプリケーションは WinINet の代わりに WinHTTP を使うべきで
ある、と Microsoft は主張している。
WinHTTP はサーバに限らず、システムサービスや HTTP ベースのクライアントアプリ
ケーションでの使用も想定している。
しかし、WinHTTP は WinINet の上位互換というわけではなく、独立に設計されたもの
で、インタフェースやサポートする機能範囲も同じではない。
Microsoft は、単一ユーザのアプリケーションで、かつ、以下の機能が必要な場合に
は依然として WinINet の使用を検討すべき、とも言っている。
- FTP、gopher
- cookie の持続
- キャッシュ管理
- 自動認証ダイアログ
- IE との互換性
- 旧 Platform のサポート
※ コネクションの接続数について、要確認
WinINet は同時接続が2つまで(RFCの規定のはず)に制限されている。
WinHTTP は同じ制限があるのか(?)
- WinHTTP バージョン
[WinHTTP 5.1]
最新バージョンである。
WinHTTP 5.1 は以下のシステムの OS コンポーネントとして提供されている。
Win2000 SP3 以降 (Datacenter Server を除く)
WinXP SP1 以降
Windows Server 2003 family
上記システム以外の WinHTTP 5.1 の再配布はサポートされていない。
WinHTTP 5.1 は NT4 では動作しない。
[WinHTTP 5.0]
WinHTTP 5.0 は再配布可能である。(winhttp5.dll)
WinHTTP 5.0 は Win2000 以降、IE5.01 以降を搭載した NT4 で動作する。
コンポーネント(SDK)が Microsoft のサイトからダウンロード可能である。
WinHTTP 5.1 のリリースに伴って WinHTTP 5.0 は収束の方向にある。
Microsoft は WinHTTP 5.0 のコードを書き直すことを強く推奨しており、
WinHTTP 5.0 のサポートは 2004年10月1日をもって打ち切られる予定である。
- 機能
サポートする機能には以下のものがある。
- HTTP/1.0 (keep-alive含む)
- HTTP/1.1 (HTTP レスポンスの chunked transfer サポート含む)
- Keep-alive pooling (匿名接続の場合、またセッションに依存しない)
- SSL (クライアント認証含む) SSL2.0, SSL3.0, TLS1.0 に対応
- サーバ認証、Proxy認証サポート (Microsoft Passport 含む)
- 自動リダイレクト (抑止も可能)
- API とスクリプトの両インタフェースに対応
- 問題解決に役立つトレースの容易さ
WinHTTP 5.1 では以下が追加されている。
- IPv6
- AutoProxy 可能
- インタフェース
C/C++ API と COM の2つのインタフェースがある。
API の方が、より細かな制御ができるが、COM はより簡単に使用可能である。
この COM インタフェースのサポートにより、スクリプトから容易に HTTP アクセスを
行えるようになった。
- 関連ツール
詳細不明、調査中。
ProxyCfg.exe は WinXP では標準添付してるらしい。
Microsoft からもダウンロードできるはずだが、物が見つからない。
WinHttpCfg.exe
ProxyCfg.exe
WinHttpTraceCfg
どうも、Win2K では SP4 で WinHttp コンポーネントは使えるようになったが、周辺
ツールは提供されていないみたい。
Microsoft のページにダウンロードできるとの記述もあったが、それもどうやら
WinHttp 5 用とか別のもので、WinHttp5.1 用のものは公開されていないようである。
- 使い方
----- a.js -----------------------------------------------------
var webreq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
try {
webreq.Open("GET", "http://www.example.com/");
webreq.Send();
WScript.Echo("--- status -------------");
WScript.Echo(webreq.Status);
WScript.Echo("--- headers ------------");
WScript.Echo(webreq.GetAllResponseHeaders);
WScript.Echo("--- body ---------------");
WScript.Echo(webreq.ResponseText);
}
catch(e) {
WScript.Echo("[ERROR] " + (e.number & 0xffff) + ": " + e.description);
}
----------------------------------------------------------------
ダウンロードするときは文字コードに注意のこと。
この例ではテキストで取り出しているため、Shift_JIS 以外は受け付けない。
Web コンテンツを保存するだけならバイナリを使う方が確実である。