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
[in] pswzServerName
HTTP 서버의 호스트 이름을 포함하는 null종료된 문자열에 대한 포인터입니다. 또는 문자열은 사이트의 IP 주소를 문자열로 포함할 수 있습니다(예: 10.0.1.45).
WinHttp는 먼저 Punycode
[in] nServerPort
연결이 이루어지는 서버의 TCP/IP 포트를 지정하는 부호 없는 정수입니다. 이 매개 변수는 유효한 TCP/IP 포트 번호이거나 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
HTTP 서버(포트 80)에 대한 기본 포트를 사용합니다. |
|
HTTPS 서버(포트 443)에 대한 기본 포트를 사용합니다. 이 포트를 선택하면 보안 연결이 자동으로 설정되지 않습니다. WinHttpOpenRequestWINHTTP_FLAG_SECURE 플래그를 사용하여 보안 트랜잭션 의미 체계를 계속 사용해야 합니다. |
|
HTTP의 경우 포트 80, HTTPS(Secure Hypertext Transfer Protocol)의 경우 포트 443을 사용합니다. |
[in] dwReserved
이 매개 변수는 예약되어 있으며 0이어야 합니다.
반환 값
연결이 성공하면 HTTP 세션에 유효한 연결 핸들을 반환하거나, 그렇지 않으면 NULL
오류 코드 | 묘사 |
---|---|
|
이 작업에 대해 제공된 핸들의 형식이 올바르지 않습니다. |
|
내부 오류가 발생했습니다. |
|
URL이 잘못되었습니다. |
|
작업이 완료되기 전에 요청이 작동 중인 핸들이 닫혔기 때문에 작업이 취소되었습니다. |
|
URL 체계를 인식할 수 없거나 지원되지 않습니다. |
|
WinHTTP 함수 지원이 종료되거나 언로드됩니다. |
|
메모리가 부족하여 요청된 작업을 완료할 수 없습니다. (Windows 오류 코드) |
발언
WinHTTP가 비동기 모드에서 사용되는 경우에도(즉, winHttpOpen
호출 애플리케이션이 WinHttpConnect반환된 HINTERNET 핸들 사용을 완료한 후에는 WinHttpCloseHandle 함수를 사용하여 닫아야 합니다.
WinHttpConnect 대상 HTTP 서버를 지정합니다. 그러나 요청이 리디렉션된 경우 다른 서버에서 응답을 받을 수 있습니다. WINHTTP_OPTION_URL 플래그를 사용하여 WinHttpQueryOption 호출하여 응답을 보내는 서버의 URL을 확인할 수 있습니다.
예제
다음 예제에서는 보안 트랜잭션 의미 체계를 사용하여 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 및 Internet Explorer 5.01 이상. |
참고 항목
WinHTTP(Microsoft Windows HTTP 서비스) 정보
winHttpCloseHandle
winHttpOpen
winHttpOpenRequest