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(Internationalized Domain Names) 처리를 참조하세요.

[in] nServerPort

연결이 이루어지는 서버의 TCP/IP 포트를 지정하는 부호 없는 정수입니다. 이 매개 변수는 유효한 TCP/IP 포트 번호 또는 다음 값 중 하나일 수 있습니다.

의미
INTERNET_DEFAULT_HTTP_PORT
HTTP 서버의 기본 포트(포트 80)를 사용합니다.
INTERNET_DEFAULT_HTTPS_PORT
HTTPS 서버의 기본 포트(포트 443)를 사용합니다. 이 포트를 선택하면 보안 연결이 자동으로 설정되지 않습니다. WinHttpOpenRequest와 함께 WINHTTP_FLAG_SECURE 플래그를 사용하여 보안 트랜잭션 의미 체계의 사용을 지정해야 합니다.
INTERNET_DEFAULT_PORT
HTTP에 포트 80을 사용하고 HTTPS(보안 하이퍼텍스트 전송 프로토콜)에 포트 443을 사용합니다.

[in] dwReserved

이 매개 변수는 예약되어 있으며 0이어야 합니다.

반환 값

연결에 성공하면 HTTP 세션에 대한 유효한 연결 핸들을 반환하고, 그렇지 않으면 NULL 을 반환합니다. 확장된 오류 정보를 검색하려면 GetLastError를 호출합니다. 반환된 오류 코드 중에는 다음과 같습니다.

오류 코드 Description
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가 비동기 모드에서 사용되는 경우에도(즉, WinHttpOpen에서 WINHTTP_FLAG_ASYNC 설정된 경우) 이 함수는 동기적으로 작동합니다. 반환 값은 성공 또는 실패를 나타냅니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

WinHttpConnect에서 반환된 HINTERNET 핸들을 사용하여 호출 애플리케이션을 완료한 후에는 WinHttpCloseHandle 함수를 사용하여 닫아야 합니다.

WinHttpConnect 는 대상 HTTP 서버를 지정합니다. 그러나 요청이 리디렉션된 경우 다른 서버에서 응답을 받을 수 있습니다. WINHTTP_OPTION_URL 플래그를 사용하여 WinHttpQueryOption 을 호출하여 응답을 보내는 서버의 URL을 확인할 수 있습니다.

참고 Windows XP 및 Windows 2000의 경우 WinHttp 시작 페이지의 런타임 요구 사항 섹션을 참조하세요.
 

예제

다음 예제에서는 보안 트랜잭션 의미 체계를 사용하여 HTTPS 서버에서 리소스를 다운로드하는 방법을 보여 줍니다. 샘플 코드는 WinHTTP(Microsoft Windows HTTP Services) 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
라이브러리 Winhttp.lib
DLL Winhttp.dll
재배포 가능 파일 Windows XP 및 Windows 2000에서 WinHTTP 5.0 및 인터넷 Explorer 5.01 이상.

추가 정보

Microsoft Windows HTTP 서비스 정보(WinHTTP)

WinHTTP 버전

WinHttpCloseHandle

WinHttpOpen

WinHttpOpenRequest