WinHTTP での WinINet プロキシ構成の設定

Win での自動プロキシの設定HTTP 5.1

WinINet から WinHTTP に移植するアプリケーションでは、WinINet またはインターネット エクスプローラー (IE) で取得できるのと同じ autoproxy 設定を使用する必要がある場合があります。 WinHTTP バージョン 5.1 API は、これらのプロキシ設定を取得して使用できます。 一般に、WinHTTP は、セッションの作成時に、セッションごとにプロキシ とプロキシ バイパス サーバーを指定します。 これらの設定は、要求ごとにオーバーライドできます。

WinINet または IE と同じプロキシ構成を使用するには、WinHTTP クライアントでセッションのプロキシ設定を設定する必要があります。 さらに、IE または WinINet が Web プロキシ自動検出 (WPAD) を使用するように構成されている場合、これらの設定を使用する WinHTTP クライアントは要求ごとにプロキシ設定を設定する必要があります。 次のセクションでは、セッションと要求のプロキシ設定を指定する方法について説明します。

セッションでのプロキシ構成の設定

アプリケーションがユーザー アカウントで実行されている

セッションが作成される前に、アプリケーションは WinHttpGetIEProxyConfigForCurrentUser を呼び出して IE プロキシ設定を取得します。 これらの設定を取得するには、アプリケーションがユーザー アカウントとして実行されている必要があります。 pProxyConfig パラメーターは、プロキシ名 (lpszProxy) サーバーとプロキシ バイパス (lpszProxyBypass) サーバーを含むWINHTTP_CURRENT_USER_IE_PROXY_CONFIG構造体へのポインターです。 その後、 WINHTTP_CURRENT_USER_IE_PROXY_CONFIG 構造体のプロキシ名とプロキシ バイパス値を使用して、WinHTTP セッションを初期化します。 セッションは、WINHTTP_CURRENT_USER_IE_PROXY_CONFIG構造体の lpszProxy メンバーと lpszProxyBypass メンバーから取得した pwszProxyName パラメーターと pwszProxyBypass パラメーターを使用して WinHttpOpen を呼び出すことによって初期化されます。

アプリケーションがサービスとして実行されている

アプリケーションでは、 WinHttpGetIEProxyConfigForCurrentUser を呼び出す前に、個々のユーザーのレジストリ設定がレジストリに読み込まれるようにする必要があります。 これらの設定がレジストリに読み込まれていない場合、 WinHttpGetIEProxyConfigForCurrentUser は プロキシ設定を取得できません。 個々のユーザーのレジストリ設定は、 LoadUserProfile 関数を呼び出すことによってレジストリに読み込むことができます。 ユーザーのレジストリ設定を読み込むオプションがない場合、アプリケーションは dwAcessType パラメーターで指定されたWINHTTP_ACCESS_TYPE_DEFAULT_PROXYを使用して WinHttpOpen を呼び出すことができます。 WinHttpOpen の呼び出しで既定のプロキシを指定すると、WinHTTP API は WinHTTP proxycfg.exe ユーティリティを使用してプロキシ構成セットを取得するように指示します。 個々のユーザーのレジストリ設定が読み込まれた後、アプリケーションは、「アプリケーション がユーザー アカウントで実行されている」 で説明されている手順に従って、プロキシ名とプロキシ バイパス サーバーを設定します。

単一要求でのプロキシ構成の設定

セッションが作成される前に、アプリケーションは WinHttpGetIEProxyConfigForCurrentUser を 呼び出して、WinINet と IE が WPAD を使用するように構成されているかどうかを判断します。 WinHttpGetIEProxyConfigForCurrentUser、fAutoDetect メンバーを含むWINHTTP_CURRENT_USER_IE_PROXY_CONFIG構造体を返します。 このメンバーの 値 TRUE は、WPAD が使用され、 lpszAutoConfigUrl メンバーに WPAD URL が含まれていることを示します。

自動プロキシ構成が使用される

WPAD が使用されている場合、アプリケーションは WinHttpGetProxyForUrl を呼び出して要求のプロキシを取得します。 lpwszUrl パラメーターには要求の送信先の URL が含まれており、pAutoProxyOptions パラメーターには、オートプロキシ オプションを含む構造体 (WINHTTP_AUTOPROXY_OPTIONS) へのポインターが含まれています。 アプリケーションは、WinHttpGetIEProxyConfigForCurrentUser の呼び出しでWINHTTP_CURRENT_USER_IE_PROXY_CONFIG構造体から返される設定を使用して、WINHTTP_AUTOPROXY_OPTIONS構造体を初期化します。 WINHTTP_AUTOPROXY_CONFIG_URL フラグは、WINHTTP_AUTOPROXY_OPTIONS構造体の dwFlags メンバーで指定され、lpszAutoconfigUrl メンバーには、WINHTTP_CURRENT_USER_IE_PROXY_CONFIG構造体のプロキシ自動構成 URL が含まれています。 WinHttpGetProxyForUrl 関数は、WINHTTP_PROXY_INFO構造体の lpszProxy メンバーと lpszProxyBypass メンバーのプロキシ名とプロキシ バイパス リストを返します。

要求のプロキシが WinHttpGetProxyForUrl から取得されると、アプリケーションは WinHttpOpenRequest を使用して要求を作成します。 次に、hInternet パラメーターで要求ハンドルを指定して、要求のプロキシを設定するために WinHttpSetOption が呼び出されます。 WinHttpSetOption の呼び出しの dwOption パラメーターは WINHTTP_OPTION_PROXY に設定する必要があります。lpBuffer パラメーターは、要求に使用するプロキシとプロキシ バイパスを含むWINHTTP_PROXY_INFO構造体へのポインターです。

自動プロキシ構成が使用されない

WinHttpGetIEProxyConfigForCurrentUser の呼び出しで autoproxy が使用されていないことが示されている場合、アプリケーションは WinHttpOpenRequest を使用して要求を作成できます。 プロキシ構成はセッション全体で同じであり、要求ごとの変更は必要ありません。