WinHttpOpenRequest 함수(winhttp.h)

WinHttpOpenRequest 함수는 HTTP 요청 핸들을 만듭니다.

구문

WINHTTPAPI HINTERNET WinHttpOpenRequest(
  [in] HINTERNET hConnect,
  [in] LPCWSTR   pwszVerb,
  [in] LPCWSTR   pwszObjectName,
  [in] LPCWSTR   pwszVersion,
  [in] LPCWSTR   pwszReferrer,
  [in] LPCWSTR   *ppwszAcceptTypes,
  [in] DWORD     dwFlags
);

매개 변수

[in] hConnect

WinHttpConnect에서 반환된 HTTP 세션에 대한 HINTERNET 연결 핸들입니다.

[in] pwszVerb

요청에 사용할 HTTP 동사가 포함된 문자열에 대한 포인터입니다. 이 매개 변수가 NULL이면 함수는 GET을 HTTP 동사로 사용합니다. 참고 이 문자열은 모두 대문자여야 합니다. 대부분의 서버는 HTTP 동사를 대/소문자를 구분하는 것으로 간주하며, IETF(Internet Engineering Task Force) RFC(주석 요청)는 대문자만 사용하여 이러한 동사의 철자를 지정합니다.

[in] pwszObjectName

지정된 HTTP 동사의 대상 리소스 이름을 포함하는 문자열에 대한 포인터입니다. 일반적으로 파일 이름, 실행 모듈 또는 검색 지정자입니다.

[in] pwszVersion

HTTP 버전을 포함하는 문자열에 대한 포인터입니다. 이 매개 변수가 NULL이면 함수는 HTTP/1.1을 사용합니다.

[in] pwszReferrer

요청 pwszObjectName 의 URL을 가져온 문서의 URL을 지정하는 문자열에 대한 포인터입니다. 이 매개 변수가 WINHTTP_NO_REFERER 설정되면 참조 문서가 지정되지 않습니다.

[in] ppwszAcceptTypes

클라이언트에서 허용하는 미디어 형식을 지정하는 문자열 포인터의 null로 끝나는 배열에 대한 포인터입니다. 이 매개 변수가 WINHTTP_DEFAULT_ACCEPT_TYPES 설정되면 클라이언트에서 형식을 허용하지 않습니다. 일반적으로 서버는 클라이언트가 "text/*" 형식의 문서만 허용한다는 표시로 허용되는 형식의 부족을 처리합니다. 즉, 그림이나 다른 이진 파일이 없는 텍스트 문서만 있습니다. 유효한 미디어 형식 목록은 에서 http://www.iana.org/assignments/media-types/IANA가 정의한 미디어 형식을 참조하세요.

[in] dwFlags

인터넷 플래그 값을 포함하는 부호 없는 긴 정수 값입니다. 다음 값 중 하나 이상일 수 있습니다.

의미
WINHTTP_FLAG_BYPASS_PROXY_CACHE
이 플래그는 WINHTTP_FLAG_REFRESH 동일한 동작을 제공합니다.
WINHTTP_FLAG_ESCAPE_DISABLE
pwszObjectName에 전달된 URL의 안전하지 않은 문자는 이스케이프 시퀀스로 변환되지 않습니다.
WINHTTP_FLAG_ESCAPE_DISABLE_QUERY
pwszObjectName에 전달된 URL의 쿼리 구성 요소에 있는 안전하지 않은 문자는 이스케이프 시퀀스로 변환되지 않습니다.
WINHTTP_FLAG_ESCAPE_PERCENT
pwszObjectName에 대해 전달된 문자열은 LPCWSTR에서 LPSTR로 변환됩니다. 안전하지 않은 모든 문자는 백분율 기호를 포함하여 이스케이프 시퀀스로 변환됩니다. 기본적으로 백분율 기호를 제외한 모든 안전하지 않은 문자는 이스케이프 시퀀스로 변환됩니다.
WINHTTP_FLAG_NULL_CODEPAGE
pwszObjectName에 대해 전달된 문자열은 WCHAR가 나타내는 유효한 ANSI 문자로 구성된 것으로 간주됩니다. 안전하지 않은 문자에 대한 검사 수행되지 않습니다.

Windows 7: 이 옵션은 사용되지 않습니다.

WINHTTP_FLAG_REFRESH
프록시 서버에서 캐시된 버전의 리소스를 보내는 대신 원래 서버로 요청을 전달해야 했음을 나타냅니다. 이 플래그를 사용하면 요청 핸들에 "Pragma: no-cache" 헤더가 추가됩니다. HTTP/1.1 요청 헤더를 만들 때 "Cache-Control: no-cache"도 추가됩니다.
WINHTTP_FLAG_SECURE
보안 트랜잭션 의미 체계를 사용합니다. 이는 SSL(Secure Sockets Layer)/TLS(전송 계층 보안)를 사용하는 것으로 변환됩니다.

반환 값

성공하면 유효한 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은 "http:" 또는 "https:" 이외의 체계를 지정했습니다.
ERROR_NOT_ENOUGH_MEMORY
요청된 작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다. (Windows 오류 코드)

설명

반환 값은 성공 또는 실패를 나타냅니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

WinHttpOpenRequest 함수는 새 HTTP 요청 핸들을 만들고 지정된 매개 변수를 해당 핸들에 저장합니다. HTTP 요청 핸들은 HTTP 서버로 보내는 요청을 보유하며 요청의 일부로 보낼 모든 RFC822/MIME/HTTP 헤더를 포함합니다.

pwszVerb이 "HEAD"로 설정된 경우 Content-Length 헤더는 무시됩니다.

WinHttpSetStatusCallback과 함께 상태 콜백 함수가 설치된 경우 WINHTTP_CALLBACK_STATUS_HANDLE_CREATED 알림은 WinHttpOpenRequest가 요청 핸들을 생성했음을 나타냅니다.

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

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

예제

이 예제에서는 HINTERNET 핸들을 가져오고, HTTP 세션을 열고, 요청 헤더를 만들고, 해당 헤더를 서버로 보내는 방법을 보여줍니다.


    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, 
                                       0, 0);

    // PLACE ADDITIONAL CODE HERE.

    // 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 버전

WinHttpConnect

WinHttpOpen