WinHttpAddRequestHeaders 함수(winhttp.h)
WinHttpAddRequestHeaders 함수는 HTTP 요청 핸들에 하나 이상의 HTTP 요청 헤더를 추가합니다.
구문
WINHTTPAPI BOOL WinHttpAddRequestHeaders(
[in] HINTERNET hRequest,
[in] LPCWSTR lpszHeaders,
[in] DWORD dwHeadersLength,
[in] DWORD dwModifiers
);
매개 변수
[in] hRequest
WinHttpOpenRequest 함수를 호출하여 반환된 HINTERNET 핸들입니다.
[in] lpszHeaders
요청에 추가할 헤더를 포함하는 문자열 변수에 대한 포인터입니다. 마지막을 제외한 각 헤더는 CR/LF(캐리지 리턴/줄 바꿈)로 종료되어야 합니다.
[in] dwHeadersLength
pwszHeaders의 길이(문자)를 포함하는 부호 없는 긴 정수 값입니다. 이 매개 변수가 -1L인 경우 함수는 pwszHeaders 가 ASCIIZ(0-terminated)이고 길이가 계산된다고 가정합니다.
[in] dwModifiers
이 함수의 의미 체계를 수정하는 데 사용되는 플래그를 포함하는 부호 없는 긴 정수 값입니다. 다음 플래그 중 하나 이상일 수 있습니다.
반환 값
성공하면 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다. 확장된 오류 정보는 GetLastError를 호출합니다. 반환된 오류 코드 중에는 다음과 같습니다.
오류 코드 | Description |
---|---|
|
제공된 핸들이 올바른 상태가 아니므로 요청된 작업을 수행할 수 없습니다. |
|
이 작업에 대해 제공된 핸들의 형식이 올바르지 않습니다. |
|
내부 오류가 발생했습니다. |
|
메모리가 부족하여 요청된 작업을 완료할 수 없습니다. |
설명
헤더는 리디렉션 간에 전송됩니다. 이는 보안 문제일 수 있습니다. 리디렉션이 발생할 때 헤더가 전송되지 않도록 하려면 WINHTTP_STATUS_CALLBACK 콜백을 사용하여 리디렉션이 발생할 때 특정 헤더를 수정합니다.
WinHTTP가 비동기 모드(즉, WinHttpOpen에서 WINHTTP_FLAG_ASYNC 설정된 경우)에서 사용되는 경우에도 이 함수는 동기적으로 작동합니다. 반환 값은 성공 또는 실패를 나타냅니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
WinHttpAddRequestHeaders 함수는 추가 자유 형식 헤더를 HTTP 요청 핸들에 추가하며 HTTP 서버로 전송된 정확한 요청에 대한 자세한 제어가 필요한 정교한 클라이언트에서 사용하기 위한 것입니다.
이 함수와 함께 추가된 요청 헤더의 이름과 값의 유효성이 검사됩니다. 헤더는 잘 구성되어야 합니다. 유효한 HTTP 헤더에 대한 자세한 내용은 RFC 2616을 참조하세요. 잘못된 헤더를 사용하면 이 함수가 실패하고 GetLastError가ERROR_INVALID_PARAMETER 반환합니다. 잘못된 헤더가 추가되지 않았습니다.
Date: request 헤더를 보내는 경우 WinHttpTimeFromSystemTime 함수를 사용하여 헤더에 대한 구조를 만들 수 있습니다.
기본 WinHttpAddRequestHeaders의 경우 애플리케이션은 단일 버퍼에서 여러 헤더를 전달할 수 있습니다.
또한 애플리케이션은 WinHttpSendRequest 를 사용하여 요청을 보내기 전에 HTTP 요청 핸들에 헤더를 추가할 수 있습니다.
예제
다음 코드 예제에는 요청에 If-Modified-Since 헤더가 포함되어 있습니다. 응답 헤더는 대상 문서가 업데이트되었는지 여부를 확인하기 위해 해석됩니다.
DWORD dwSize = sizeof(DWORD);
DWORD dwStatusCode = 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.microsoft.com",
INTERNET_DEFAULT_HTTP_PORT,
0 );
// Create an HTTP Request handle.
if( hConnect )
hRequest = WinHttpOpenRequest( hConnect,
L"GET",
NULL,
NULL,
WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0 );
// Add a request header.
if( hRequest )
bResults = WinHttpAddRequestHeaders( hRequest,
L"If-Modified-Since: Mon, 20 Nov 2000 20:00:00 GMT",
(ULONG)-1L,
WINHTTP_ADDREQ_FLAG_ADD );
// Send a Request.
if( bResults )
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0,
WINHTTP_NO_REQUEST_DATA,
0,
0,
0 );
// End the request.
if( bResults )
bResults = WinHttpReceiveResponse( hRequest, NULL);
// Use WinHttpQueryHeaders to obtain the header buffer.
if( bResults )
bResults = WinHttpQueryHeaders( hRequest,
WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER,
NULL,
&dwStatusCode,
&dwSize,
WINHTTP_NO_HEADER_INDEX );
// Based on the status code, determine whether
// the document was recently updated.
if( bResults )
{
if( dwStatusCode == 304 )
printf( "Document has not been updated.\n" );
else if( dwStatusCode == 200 )
printf( "Document has been updated.\n" );
else
printf( "Status code = %u.\n",dwStatusCode );
}
// Report any errors.
if( !bResults )
printf( "Error %d has occurred.\n", GetLastError( ) );
// Close 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 이상. |