WinHttpReceiveResponse 함수(winhttp.h)
WinHttpReceiveResponse 함수는 WinHttpSendRequest에서 시작한 HTTP 요청에 대한 응답을 받기 위해 대기합니다. WinHttpReceiveResponse가 성공적으로 완료되면 상태 코드 및 응답 헤더가 수신되고 애플리케이션에서 WinHttpQueryHeaders를 사용하여 검사할 수 있습니다. 애플리케이션이 WinHttpQueryDataAvailable 및 WinHttpReadData를 사용하여 응답 엔터티 본문(있는 경우)에 액세스하려면 먼저 WinHttpReceiveResponse를 호출해야 합니다.
구문
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
매개 변수
[in] hRequest
WINHttpOpenRequest에서 반환되고 WinHttpSendRequest에서 보낸 HINTERNET 핸들입니다. WinHttpReceiveResponse를 호출하기 전에 WinHttpSendRequest가 이 핸들에 대해 완료될 때까지 기다립니다.
[in] lpReserved
이 매개 변수는 예약되어 있으며 NULL이어야 합니다.
반환 값
성공하면 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다. 확장 오류 정보는 GetLastError를 호출합니다. 반환된 오류 코드 중에는 다음과 같습니다.
오류 코드 | Description |
---|---|
|
서버에 연결하지 못한 경우 반환됩니다. |
|
청크 분할 인코딩을 구문 분석하는 과정에서 오버플로 조건이 발견되면 반환됩니다. |
|
서버가 클라이언트 인증을 요청할 때 반환됩니다. |
|
서버와의 연결이 다시 설정되거나 종료되었거나 호환되지 않는 SSL 프로토콜이 발견되었습니다. 예를 들어 WinHTTP 버전 5.1은 클라이언트가 특별히 사용하도록 설정하지 않는 한 SSL2를 지원하지 않습니다. |
|
WinHTTP가 수신할 수 있는 것보다 많은 수의 헤더가 응답에 있을 때 반환됩니다. |
|
받은 헤더의 크기가 요청 핸들에 대한 제한을 초과하면 WinHttpReceiveResponse 에서 반환됩니다. |
|
제공된 핸들이 올바른 상태가 아니므로 요청된 작업을 수행할 수 없습니다. |
|
제공된 핸들의 형식이 이 작업에 잘못되었습니다. |
|
내부 오류가 발생했습니다. |
|
서버 응답을 구문 분석할 수 없습니다. |
|
URL이 올바르지 않습니다. |
|
로그인 시도가 실패했습니다. 이 오류가 발생하면 WinHttpCloseHandle을 사용하여 요청 핸들을 닫아야 합니다. 원래 이 오류를 생성한 함수를 다시 시도하기 전에 새 요청 핸들을 만들어야 합니다. |
|
서버 이름을 확인할 수 없습니다. |
|
작업이 완료되기 전에 요청이 작동 중인 핸들이 닫혔기 때문에 작업이 취소되었습니다. |
|
체계가 변경되었거나 리디렉션을 시도한 모든 시도가 실패했기 때문에 리디렉션에 실패했습니다(기본값은 5회 시도). |
|
WinHTTP 함수가 실패했습니다. 원하는 함수는 동일한 요청 핸들에서 다시 시도될 수 있습니다. |
|
들어오는 응답이 내부 WinHTTP 크기 제한을 초과하면 반환됩니다. |
|
서버에서 보낸 SSL(Secure Sockets Layer) 인증서에서 하나 이상의 오류가 발견되었습니다. 발생한 오류 유형을 확인하려면 상태 콜백 함수에서 WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 알림을 검사. 자세한 내용은 WINHTTP_STATUS_CALLBACK. |
|
요청 시간이 초과되었습니다. |
|
URL은 "http:" 또는 "https:" 이외의 체계를 지정했습니다. |
|
요청된 작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다. (Windows 오류 코드) |
설명
WinHTTP가 비동기 모드에서 사용되는 경우에도(즉, WinHttpOpen에서 WINHTTP_FLAG_ASYNC 설정된 경우) 이 함수는 동기적으로 또는 비동기적으로 작동할 수 있습니다. 이 함수가 FALSE를 반환하는 경우 이 함수는 실패했으며 GetLastError 를 호출하여 확장된 오류 정보를 가져올 수 있습니다. 이 함수가 TRUE를 반환하는 경우 애플리케이션은 성공을 나타내는 WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 완료 콜백 또는 작업이 비동기적으로 완료되었지만 실패했음을 나타내는 WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 완료 콜백을 예상해야 합니다.
WinHttpSetStatusCallback과 함께 상태 콜백 함수가 설치된 경우 WinHttpSetStatusCallback의 dwNotificationFlags 매개 변수에 설정된 다음 알림 중 응답 수신 진행률을 나타냅니다.
- WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
- WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
- WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
- WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
- WINHTTP_CALLBACK_STATUS_REDIRECT
- WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
- WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
예제
이 예제에서는 HTTP 서버에 데이터를 쓰는 코드를 보여 줍니다. 예제에서 제공된 서버 이름 (www.wingtiptoys.com)은 가상이며 쓰기 권한이 있는 서버의 이름으로 바꿔야 합니다.
LPSTR pszData = "WinHttpWriteData Example";
DWORD dwBytesWritten = 0;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"A WinHTTP Example Program/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.wingtiptoys.com",
INTERNET_DEFAULT_HTTP_PORT, 0);
// Create an HTTP Request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"PUT",
L"/writetst.txt",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Send a Request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
(DWORD)strlen(pszData), 0);
// Write data to the server.
if (bResults)
bResults = WinHttpWriteData( hRequest, pszData,
(DWORD)strlen(pszData),
&dwBytesWritten);
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// 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 이상. |