다음을 통해 공유


WinHttpCreateUrl 함수(winhttp.h)

WinHttpCreateUrl 함수는 호스트 이름 및 경로와 같은 구성 요소 부분에서 URL을 만듭니다.

구문

WINHTTPAPI BOOL WinHttpCreateUrl(
  [in]      LPURL_COMPONENTS lpUrlComponents,
  [in]      DWORD            dwFlags,
  [out]     LPWSTR           pwszUrl,
  [in, out] LPDWORD          pdwUrlLength
);

매개 변수

[in] lpUrlComponents

URL을 만들 구성 요소가 포함된 URL_COMPONENTS 구조체에 대한 포인터입니다.

[in] dwFlags

이 함수의 작업을 제어하는 플래그입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
ICU_ESCAPE
모든 안전하지 않은 문자를 lpszUrlPath 멤버가 가리키는 경로 문자열의 해당 이스케이프 시퀀스로 변환하고 lpszExtraInfo에서 lpUrlComponents 매개 변수가 가리키는 URL_COMPONENTS 구조체의 멤버가 가리키는 추가 정보 문자열을 변환합니다.
ICU_REJECT_USERPWD
URL을 사용자 이름 또는 암호 또는 둘 다를 포함하는 입력으로 거부합니다. 잘못된 URL로 인해 함수가 실패하면 GetLastError에 대한 후속 호출은 ERROR_WINHTTP_INVALID_URL 반환합니다.

[out] pwszUrl

URL을 와이드 문자(유니코드) 문자열로 수신하는 문자 버퍼에 대한 포인터입니다.

[in, out] pdwUrlLength

와이드(유니코드) 문자로 pwszUrl 버퍼의 길이를 수신하는 부호 없는 long 정수 형식의 변수에 대한 포인터입니다. 함수가 반환될 때 이 매개 변수는 종료 문자에 대해 1을 뺀 URL 문자열의 길이를 문자로 받습니다. GetLastError가 ERROR_INSUFFICIENT_BUFFER 반환하는 경우 이 매개 변수는 만든 URL을 보유하는 데 필요한 와이드 문자 수를 받습니다.

반환 값

함수가 성공하면 TRUE 를 반환하고, 그렇지 않으면 FALSE 를 반환합니다. 확장 오류 데이터를 얻으려면 GetLastError를 호출합니다. 반환된 오류 코드 중에는 다음과 같습니다.

오류 코드 Description
ERROR_WINHTTP_INTERNAL_ERROR
내부 오류가 발생했습니다.
ERROR_NOT_ENOUGH_MEMORY
요청된 작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다. (Windows 오류 코드)

설명

WinHTTP가 비동기 모드에서 사용되는 경우에도, 즉 WinHttpOpen에서 WINHTTP_FLAG_ASYNC 설정된 경우 이 함수는 동기적으로 작동합니다. 반환 값은 성공 또는 실패를 나타냅니다. 확장 오류 데이터를 얻으려면 GetLastError를 호출합니다.

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

예제

다음 예제에서는 URL을 하위 구성 요소로 디컴파일하거나 크래킹하고 구성 요소를 업데이트한 다음 URL을 다시 구성하는 방법을 보여 줍니다.


    URL_COMPONENTS urlComp;
    LPCWSTR pwszUrl1 = 
       L"http://search.msn.com/results.asp?RS=CHECKED&FORM=MSNH&v=1&q=wininet";
    DWORD dwUrlLen = 0;

    // Initialize the URL_COMPONENTS structure.
    ZeroMemory(&urlComp, sizeof(urlComp));
    urlComp.dwStructSize = sizeof(urlComp);

    // Set required component lengths to non-zero, 
    // so that they are cracked.
    urlComp.dwSchemeLength    = (DWORD)-1;
    urlComp.dwHostNameLength  = (DWORD)-1;
    urlComp.dwUrlPathLength   = (DWORD)-1;
    urlComp.dwExtraInfoLength = (DWORD)-1;

    // Crack the URL.
    if (!WinHttpCrackUrl( pwszUrl1, (DWORD)wcslen(pwszUrl1), 0, &urlComp))
    {
        printf("Error %u in WinHttpCrackUrl.\n", GetLastError());
    }
    else
    {
        // Change the search data. New data is the same length.
        urlComp.lpszExtraInfo = L"?RS=CHECKED&FORM=MSNH&v=1&q=winhttp";

        // Obtain the size of the new URL and allocate memory.
        WinHttpCreateUrl( &urlComp, 0, NULL, &dwUrlLen);
        LPWSTR pwszUrl2 = new WCHAR[dwUrlLen];

        // Create a new URL.
        if(!WinHttpCreateUrl( &urlComp, 0, pwszUrl2, &dwUrlLen))
        {
            printf( "Error %u in WinHttpCreateUrl.\n", GetLastError());
        }
        else
        {
            // Show both URLs.
            printf( "Old URL:  %S\nNew URL:  %S\n", pwszUrl1, pwszUrl2);
        }

        // Free allocated memory.
        delete [] pwszUrl2;
    }

요구 사항

   
지원되는 최소 클라이언트 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 버전

WinHttpCrackUrl