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 포트 번호 또는 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
HTTP 서버의 기본 포트(포트 80)를 사용합니다. |
|
HTTPS 서버의 기본 포트(포트 443)를 사용합니다. 이 포트를 선택하면 보안 연결이 자동으로 설정되지 않습니다. WinHttpOpenRequest와 함께 WINHTTP_FLAG_SECURE 플래그를 사용하여 보안 트랜잭션 의미 체계의 사용을 지정해야 합니다. |
|
HTTP에 포트 80을 사용하고 HTTPS(보안 하이퍼텍스트 전송 프로토콜)에 포트 443을 사용합니다. |
[in] dwReserved
이 매개 변수는 예약되어 있으며 0이어야 합니다.
반환 값
연결에 성공하면 HTTP 세션에 대한 유효한 연결 핸들을 반환하고, 그렇지 않으면 NULL 을 반환합니다. 확장된 오류 정보를 검색하려면 GetLastError를 호출합니다. 반환된 오류 코드 중에는 다음과 같습니다.
오류 코드 | Description |
---|---|
|
제공된 핸들의 형식이 이 작업에 잘못되었습니다. |
|
내부 오류가 발생했습니다. |
|
URL이 올바르지 않습니다. |
|
작업이 완료되기 전에 요청이 작동 중인 핸들이 닫혔기 때문에 작업이 취소되었습니다. |
|
URL 체계를 인식할 수 없거나 지원되지 않습니다. |
|
WinHTTP 함수 지원이 종료되거나 언로드되고 있습니다. |
|
요청된 작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다. (Windows 오류 코드) |
설명
WinHTTP가 비동기 모드에서 사용되는 경우에도(즉, WinHttpOpen에서 WINHTTP_FLAG_ASYNC 설정된 경우) 이 함수는 동기적으로 작동합니다. 반환 값은 성공 또는 실패를 나타냅니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
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 및 인터넷 Explorer 5.01 이상. |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기