インターネット機能の有効化

WinINet 関数を使用する前に、アプリケーションは InternetAttemptConnect 関数を使用してインターネットへの接続を試行する必要があります。 この関数は、ダイヤルアップ ダイアログ ボックスを呼び出してインターネットへの接続を開始するか、接続が既に存在する場合はチェックします。 この関数が失敗した場合、アプリケーションはオフライン モードに入り、インターネットへの以前の接続中にキャッシュされた情報にアクセスできます。

InternetCheckConnection 関数を使用して、インターネットへの接続をチェックします。 関数に渡される URL で指定されたサーバーに ping を実行しようとします。 FLAG_ICC_FORCE_CONNECTION フラグが設定され、URL が NULL の場合、関数は、最も近いサーバーのサーバー データベースにエントリがあるかどうかを確認します。 存在する場合、関数はそのサーバーに ping を実行します。

次に、 InternetOpen 関数を使用して、クライアント アプリケーションが使用しているインターネット接続の特性を確立します。 InternetOpen は、httpftp セッションの確立に使用されるルート HINTERNET ハンドルを作成します。 InternetOpen は、インターネットへの接続をテストして、関数に渡される特性が正しいことを確認しません。

特定のセッションを作成するには、 InternetConnect 関数を使用します。 InternetConnect は、渡された引数を使用して指定されたサイトのセッションを初期化し、ルート ハンドルの分岐である HINTERNET ハンドルを作成します。 InternetConnect は、FTP セッションの場合を除き、指定されたサイトへのアクセスまたは接続の確立を試みません。 FtpFindFirstFileFtpOpenFileHttpOpenRequest 関数は、 InternetConnect によって作成されたハンドルを使用して、指定されたサイトへの接続を確立します。

InternetOpen の使用

インターネットへの接続を有効にするには、InternetOpen を使用してルート HINTERNET ハンドルを作成する必要があります。 ユーザー エージェント (インターネット関数を呼び出すアプリケーション)、インターネットへのアクセスの種類、プロキシ名、プロキシをバイパスするホストとアドレス、および動作に関する情報が InternetOpen に渡されます。

ユーザー エージェントの設定

呼び出し元のアプリケーションは、InternetOpenlpszAgent パラメーターにインターネットにアクセスするアプリケーションまたはエンティティの名前を含む文字列を指定する必要があります。 この文字列は、HTTP プロトコルのユーザー エージェントとして使用されます。 たとえば、Microsoft Internet エクスプローラー では "Microsoft Internet エクスプローラー" が使用されます。

アクセスの種類の設定

InternetOpen では 、次の 3 つのアクセスの種類がサポートされています。

  • アプリケーションが実行されているシステムがインターネットへの直接接続を使用する場合は、INTERNET_OPEN_TYPE_DIRECTを使用します。 InternetOpenの lpszProxyName パラメーターと lpszProxyBypass パラメーターは使用されず、NULL に設定する必要があります。
  • アプリケーションが実行されているシステムが 1 つ以上のプロキシ サーバーを使用してインターネットにアクセスする場合は、INTERNET_OPEN_TYPE_PROXYを使用します。 InternetOpen、lpszProxyName で示されるプロキシ サーバーを使用し、 lpszProxyBypass で指定されたホスト名または IP アドレスのプロキシをバイパスします。
  • INTERNET_OPEN_TYPE_PRECONFIGを使用して、レジストリから構成を取得するようにアプリケーションに指示します。 Web ブラウザーを含むほとんどのアプリケーションでこのオプションが使用されるため、通常はこれが最適な選択肢です。

INTERNET_OPEN_TYPE_PRECONFIG、 レジストリ値 ProxyEnableProxyServerProxyOverride を確認します。 これらの値は、"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" の下にあります。

ProxyEnable が 0 の場合、アプリケーションは INTERNET_OPEN_TYPE_DIRECTを使用します。 それ以外の場合、アプリケーションはINTERNET_OPEN_TYPE_PROXYを使用し、 ProxyServerProxyOverride の情報を使用します。

WinINet 関数は、インターネット エクスプローラーがインストールされている場合にのみ、SOCKS 型プロキシをサポートします。 Internet エクスプローラー のインストールには、SOCKS プロキシをサポートするために必要な Wsock32n.dll ファイルが含まれています。 Wsock32n.dll は再頒布可能ではありません。

プロキシ サーバーの一覧表示

WinINet は、CERN 型プロキシ (HTTP のみ) と TIS FTP プロキシ (FTP のみ) の 2 種類のプロキシを認識します。 インターネット エクスプローラーがインストールされている場合、WinINet では SOCKS 型プロキシもサポートされます。 InternetConnect では、既定では、指定されたプロキシが CERN プロキシであると想定しています。 アクセスの種類が INTERNET_OPEN_TYPE_DIRECT または INTERNET_OPEN_TYPE_PRECONFIG に設定されている場合は、InternetOpenlpszProxyName パラメーターを NULL に設定する必要があります。 それ以外の場合、 lpszProxyName に渡される値には、スペース区切り文字列内のプロキシが含まれている必要があります。 プロキシの一覧には、プロキシへのアクセスに使用されるポート番号を含めることができます。

特定のプロトコルのプロキシを一覧表示するには、文字列が ""<protocol><protocol>://<proxy_name>"" の形式に従っている必要があります。 有効なプロトコルは HTTP、HTTPS、FTP です。 たとえば、FTP プロキシを一覧表示する場合、有効な文字列は ""ftp=ftp://ftp_proxy_name:21"です。ここで、ftp_proxy_nameは FTP プロキシの名前、21 はプロキシへのアクセスに使用する必要があるポート番号です。 プロキシがそのプロトコルの既定のポート番号を使用する場合は、ポート番号を省略できます。 プロキシ名が単独で一覧表示されている場合は、特定のプロキシが指定されていないプロトコルの既定のプロキシとして使用されます。 たとえば、""http=https://http_proxy other"" は HTTP 操作にhttp_proxyを使用し、他のすべてのプロトコルでは他のプロトコルを使用します。

既定では、 関数は lpszProxyName で指定されたプロキシが CERN プロキシであることを前提としています。 アプリケーションでは、異なるプロトコルの異なるプロキシを含め、複数のプロキシを指定できます。 たとえば、"ftp=ftp://ftp-gw HTTP=https://jericho:99 proxy" を指定した場合、FTP 要求はポート 21 でリッスンする ftp-gw プロキシを介して行われ、HTTP 要求は、ポート 99 でリッスンする jericho という CERN プロキシを介して行われます。 それ以外の場合、HTTP 要求は、ポート 80 でリッスンするプロキシと呼ばれる CERN プロキシを介して行われます。 たとえば、アプリケーションで FTP のみを使用している場合、""ftp=ftp://ftp-gw:21" を指定する必要はありません。 ""ftp-gw" だけを指定できます。 アプリケーションは、 InternetOpen によって返されるハンドルごとに複数のプロトコルを使用している場合にのみ、プロトコル名を指定する必要があります。

プロキシ バイパスの一覧表示

プロキシに送信すべきではないホスト名または IP アドレスは、プロキシ バイパスリストに一覧表示できます。 この一覧にはワイルドカード "*" を含めることができます。これにより、指定したパターンに適合するアドレスに対してアプリケーションがプロキシ サーバーをバイパスします。 複数のアドレスとホスト名を一覧表示するには、プロキシ バイパス文字列でセミコロンで区切ります。 "<local>" マクロが指定されている場合、関数はピリオドを含まないホスト名に対してプロキシをバイパスします。

既定では、WinINet は、ホスト名 "localhost"、"loopback"、"127.0.0.1"、または "[::1]" を使用する要求のプロキシをバイパスします。 通常、リモート プロキシ サーバーではこれらのアドレスが正しく解決されないため、この動作が存在します。

インターネット エクスプローラー 9: "<-loopback>" マクロを使用して、プロキシ バイパス リストからローカル コンピューターを削除できます。

次の例は、異なるプロキシ バイパス文字列を使用して InternetOpen を呼び出すサンプルを示しています。 各呼び出しの上のコメントには、 作成する HINTERNET ハンドルからアクセスされるホスト名に対するバイパス文字列の影響が記述されています。

HINTERNET hInternetRoot;

/* bypass the proxy for any host name that does not 
    contain a period */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("<local>"), 0);

/* bypass the proxy for any host name that starts with the 
    letters "ms" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("ms*"), 0);

/* bypass the proxy for any host name that contains "int", 
    such as "internet" and "painter" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("*int*"), 0);

/* bypass the proxy for the host name "example" and any 
    host name that contains "test" */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("example *test*"), 0);

/* Disable the loopback proxy bypass for localhost */
hInternetRoot = InternetOpen(TEXT("WinInet Example"), 
    INTERNET_OPEN_TYPE_PROXY,TEXT("127.0.0.1:8888"),TEXT("<-loopback>"), 0);

InternetConnect の使用

セッションを開始するには、 InternetConnect 関数が InternetOpen 関数によって返されるルート ハンドルからハンドルを作成する必要があります。 InternetConnect は、サーバー アドレス、ポート番号、ユーザー名、パスワード、サービスの種類を設定します。

InternetConnect は、InternetOpen によって作成されたルート HINTERNET ハンドルを使用してセッション ハンドルを確立します。 InternetOpen の呼び出しでINTERNET_FLAG_ASYNC フラグが設定されている場合、InternetConnect の呼び出しには 0 以外のコンテキスト値が含まれている必要があります。

サーバー名には、サイトのホスト名 (例: "www.servername.com") または IP 番号を ASCII ドット 10 進数形式 ("10.0.1.45" など) で含めることができます。

サーバー ポートは、サーバー上で接続する伝送制御プロトコル/インターネット プロトコル (TCP/IP) ポート番号です。 INTERNET_INVALID_PORT_NUMBER値が使用されている場合、InternetConnect は、選択したサービスの種類の既定のポートを使用します。 次の表に、WinINet のサーバー ポートの既定値を示します。

意味
INTERNET_DEFAULT_FTP_PORT ftp サーバーの既定のポート (ポート 21) を使用します。
INTERNET_DEFAULT_GOPHER_PORT gopher サーバーの既定のポート (ポート 70) を使用します。 メモ: Windows XP および Windows Server 2003 R2 以前のみ。
INTERNET_DEFAULT_HTTP_PORT http サーバーの既定のポート (ポート 80) を使用します。
INTERNET_DEFAULT_HTTPS_PORT https サーバーの既定のポート (ポート 443) を使用します。
INTERNET_DEFAULT_SOCKS_PORT SOCKS ファイアウォール サーバーの既定のポート (ポート 1080) を使用します。

ユーザー名とパスワードの定義

lpszUsername の値は、ログオンしているユーザーの名前を含む null で終わる文字列のアドレスです。 このパラメーターが NULL の場合、関数は HTTP を除く適切な既定値を使用します。 HTTP の NULL パラメーターを指定すると、サーバーからエラーが返されます。 FTP プロトコルの場合、既定値は匿名です。

lpszPassword の値は、ログオン パスワードを含む null で終わる文字列のアドレスです。 lpszUsernamelpszPassword の両方が NULL の場合、関数は既定の匿名パスワードを使用します。 FTP の場合、既定の匿名パスワードはユーザーの電子メール名です。 lpszUsernameNULL ではなく、lpszPasswordNULL の場合、関数は空白のパスワードを使用します。 lpszUsernamelpszPassword には、次の表に示す動作を生成する 4 つの設定があります。

lpszUsername lpszPassword FTP サーバーに送信されたユーザー名 FTP サーバーに送信されたパスワード
NULL NULL "anonymous" ユーザーのメール名
NULL 以外の文字列 NULL lpszUsername ""
NULL NULL 以外の文字列 ERROR ERROR
NULL 以外の文字列 NULL 以外の文字列 lpszUsername lpszPassword

この情報は、 InternetSetOption 関数と InternetErrorDlg 関数を使用して変更できます。 InternetSetOption は ユーザー名とパスワードの値を変更しますが、 InternetErrorDlg には適切なユーザー名とパスワードを要求するダイアログ ボックスが表示されます。

セッションの定義

確立されるセッションを定義するには、 InternetConnect のサービスの種類、フラグ、およびコンテキスト値を設定します。

InternetConnect には、INTERNET_SERVICE_FTPとINTERNET_SERVICE_HTTPの 2 種類のサービスがあります。 INTERNET_SERVICE_HTTPは、HTTP セッションと HTTPS セッションの両方に使用されます。

INTERNET_FLAG_PASSIVE は、WinINet 関数で使用される唯一のサービス固有フラグです。 このフラグは、パッシブ FTP セマンティクスを使用するためにサービスの種類がINTERNET_SERVICE_FTPされている場合に設定できます。

すべての同期操作では、 dwContext の値を 0 に設定する必要があります。 InternetOpen の呼び出しで INTERNET_FLAG_ASYNC フラグを設定して非同期操作が確立された場合は、dwContext に 0 以外の値を指定する必要があります。 非同期操作の詳細については、「非同期操作の 設定」を参照してください。

FTP セッションの場合、 InternetConnect はインターネット上のサーバーへの接続を確立しようとします。 HTTP セッションの場合、別の関数がサーバーから情報を取得するまで、 InternetConnect は接続を確立しません。

注意

WinINet では、サーバーの実装はサポートされていません。 また、サービスから使用しないでください。 サーバーの実装またはサービスの場合は、 Microsoft Windows HTTP サービス (WinHTTP) を使用します。