WinHttpConnect 関数 (winhttp.h)

WinHttpConnect 関数は、HTTP 要求の初期ターゲット サーバーを指定し、その初期ターゲットの HTTP セッションに HINTERNET 接続ハンドルを返します。

構文

WINHTTPAPI HINTERNET WinHttpConnect(
  [in] HINTERNET     hSession,
  [in] LPCWSTR       pswzServerName,
  [in] INTERNET_PORT nServerPort,
  [in] DWORD         dwReserved
);

パラメーター

[in] hSession

WinHttpOpen の以前の呼び出しによって返された有効な HINTERNET WinHTTP セッション ハンドル。

[in] pswzServerName

HTTP サーバーのホスト名を含む null で終わる文字列へのポインター。 または、ASCII のサイトの IP アドレス (10.0.1.45 など) を文字列に含めることができます。 WinHttp では、最初に Punycode に変換せずに国際ホスト名を受け入れられません。 詳細については、「 国際化ドメイン名 (IDN) の処理」を参照してください。

[in] nServerPort

接続先のサーバー上の TCP/IP ポートを指定する符号なし整数。 このパラメーターには、任意の有効な TCP/IP ポート番号、または次のいずれかの値を指定できます。

意味
INTERNET_DEFAULT_HTTP_PORT
HTTP サーバーの既定のポート (ポート 80) を使用します。
INTERNET_DEFAULT_HTTPS_PORT
HTTPS サーバーの既定のポート (ポート 443) を使用します。 このポートを選択しても、セキュリティで保護された接続は自動的には確立されません。 WinHttpOpenRequestWINHTTP_FLAG_SECURE フラグを使用して、セキュリティで保護されたトランザクション セマンティクスの使用を指定する必要があります。
INTERNET_DEFAULT_PORT
HTTP の場合はポート 80、セキュリティで保護されたハイパーテキスト転送プロトコル (HTTPS) にはポート 443 を使用します。

[in] dwReserved

このパラメーターは予約済みであり、0 である必要があります。

戻り値

接続が成功した場合は HTTP セッションへの有効な接続ハンドルを返し、それ以外の場合は NULL を 返します。 拡張エラー情報を取得するには、 GetLastError を呼び出します。 返されるエラー コードの中には、次のエラー コードがあります。

エラー コード 説明
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
指定されたハンドルの種類がこの操作に対して正しくありません。
ERROR_WINHTTP_INTERNAL_ERROR
内部エラーが発生しました。
ERROR_WINHTTP_INVALID_URL
URL が無効です。
ERROR_WINHTTP_OPERATION_CANCELLED
通常、操作が完了する前に要求が操作されていたハンドルが閉じられたため、操作は取り消されました。
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
URL スキームを認識できなかったか、サポートされていません。
ERROR_WINHTTP_SHUTDOWN
WinHTTP 関数のサポートがシャットダウンまたはアンロードされています。
ERROR_NOT_ENOUGH_MEMORY
要求された操作を完了するのに十分なメモリが使用できませんでした。 (Windows エラー コード)

注釈

WinHTTP が非同期モードで使用されている場合 (つまり、WinHttpOpenWINHTTP_FLAG_ASYNCが設定されている場合)、この関数は同期的に動作します。 戻り値は、成功または失敗を示します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

呼び出し元のアプリケーションで WinHttpConnect によって返される HINTERNET ハンドルの使用が完了したら、WinHttpCloseHandle 関数を使用して閉じる必要があります。

WinHttpConnect はターゲット HTTP サーバーを指定しますが、要求がリダイレクトされた場合、応答は別のサーバーから送信される可能性があります。 WINHTTP_OPTION_URL フラグを指定して WinHttpQueryOption を呼び出すことで、応答を送信するサーバーの URL を確認できます。

メモ Windows XP および Windows 2000 の場合は、WinHttp スタート ページの 「ランタイム要件 」セクションを参照してください。
 

次の例は、セキュリティで保護されたトランザクション セマンティクスを使用して、HTTPS サーバーからリソースをダウンロードする方法を示しています。 サンプル コードでは、Microsoft Windows HTTP Services (WinHTTP) アプリケーション プログラミング インターフェイス (API) を初期化し、ターゲット HTTPS サーバーを選択してから、このセキュリティで保護されたリソースの要求を開いて送信します。
WinHttpQueryDataAvailable は、ダウンロードできるデータの量を決定するために要求ハンドルと共に使用され、そのデータの読み取りには WinHttpReadData が使用されます。 このプロセスは、ドキュメント全体が取得されて表示されるまで繰り返されます。


    DWORD dwSize = 0;
    DWORD dwDownloaded = 0;
    LPSTR pszOutBuffer;
    BOOL  bResults = FALSE;
    HINTERNET  hSession = NULL, 
               hConnect = NULL,
               hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    hSession = WinHttpOpen( L"WinHTTP Example/1.0",  
                            WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                            WINHTTP_NO_PROXY_NAME, 
                            WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    if (hSession)
        hConnect = WinHttpConnect( hSession, L"www.microsoft.com",
                                   INTERNET_DEFAULT_HTTPS_PORT, 0);

    // Create an HTTP request handle.
    if (hConnect)
        hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
                                       NULL, WINHTTP_NO_REFERER, 
                                       WINHTTP_DEFAULT_ACCEPT_TYPES, 
                                       WINHTTP_FLAG_SECURE);

    // Send a request.
    if (hRequest)
        bResults = WinHttpSendRequest( hRequest,
                                       WINHTTP_NO_ADDITIONAL_HEADERS,
                                       0, WINHTTP_NO_REQUEST_DATA, 0, 
                                       0, 0);

 
    // End the request.
    if (bResults)
        bResults = WinHttpReceiveResponse( hRequest, NULL);

    // Keep checking for data until there is nothing left.
    if (bResults)
        do 
        {
            // Check for available data.
            dwSize = 0;
            if (!WinHttpQueryDataAvailable( hRequest, &dwSize))
                printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());

            // Allocate space for the buffer.
            pszOutBuffer = new char[dwSize+1];
            if (!pszOutBuffer)
            {
                printf("Out of memory\n");
                dwSize=0;
            }
            else
            {
                // Read the Data.
                ZeroMemory(pszOutBuffer, dwSize+1);

                if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, 
                                      dwSize, &dwDownloaded))
                    printf( "Error %u in WinHttpReadData.\n", GetLastError());
                else
                    printf( "%s\n", pszOutBuffer);
            
                // Free the memory allocated to the buffer.
                delete [] pszOutBuffer;
            }

        } while (dwSize > 0);


    // Report any errors.
    if (!bResults)
        printf("Error %d has occurred.\n", GetLastError());

    // Close any open handles.
    if (hRequest) WinHttpCloseHandle(hRequest);
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);

要件

要件
サポートされている最小のクライアント Windows XP、Windows 2000 Professional sp3 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003、Windows 2000 Server SP3 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winhttp.h
Library Winhttp.lib
[DLL] Winhttp.dll
再頒布可能パッケージ Windows XP および Windows 2000 で WinHTTP 5.0 およびインターネット エクスプローラー 5.01 以降。

こちらもご覧ください

Microsoft Windows HTTP サービス (WinHTTP) について

WinHTTP バージョン

WinHttpCloseHandle

WinHttpOpen

WinHttpOpenRequest