다음을 통해 공유


인터넷 옵션 설정 및 검색

이 항목에서는 InternetSetOptionInternetQueryOption 함수를 사용하여 인터넷 옵션을 설정하고 검색하는 방법을 설명합니다.

Microsoft Internet Explorer 지정된 HINTERNET 핸들 또는 현재 설정에서 인터넷 옵션을 설정하거나 검색할 수 있습니다.

구현 단계

인터넷 옵션을 설정하거나 검색하려면 다음을 완료합니다.

인터넷 옵션 선택

인터넷 옵션이 너무 많기 때문에 올바른 옵션을 선택하는 것이 중요합니다. 많은 인터넷 옵션은 WinINet 함수 및 인터넷 Explorer 동작에 영향을 줍니다.

예를 들어, 다음을 수행할 수 있습니다.

  • 사용자 이름 및 암호를 설정하여 기본 서버 및 프록시 인증을 처리합니다.
  • 서버에서 클라이언트 애플리케이션 또는 브라우저의 기능을 식별하는 데 사용하는 사용자 에이전트 문자열을 설정하거나 검색합니다.
  • 지정된 HINTERNET 핸들의 핸들 형식을 검색합니다.

자세한 내용과 인터넷 옵션 목록은 옵션 플래그를 참조하세요.

인터넷 Explorer 5 이상에서는 INTERNET_PER_CONN_OPTION_LIST 및INTERNET_PER_CONN_OPTION 구조를 사용하여 특정 인터넷 연결에서 일부 옵션을 설정하거나 검색할 수 있습니다. 자세한 내용과 특정 인터넷 연결에서 설정하거나 검색할 수 있는 옵션 목록은 INTERNET_PER_CONN_OPTION 구조의 dwOptions 멤버를 참조하세요.

HINTERNET 핸들 선택

인터넷 옵션을 설정하거나 검색하는 데 사용되는 HINTERNET 핸들은 작업의 scope 결정합니다. 이 핸들을 통해 만든 모든 핸들은 이 핸들에 설정된 옵션을 상속합니다.

예를 들어 인증을 사용하는 프록시가 필요한 클라이언트 애플리케이션은 애플리케이션이 인터넷 리소스에 액세스하려고 할 때마다 프록시 사용자 이름 및 암호를 설정할 필요가 없습니다. 지정된 연결의 모든 요청이 동일한 프록시에 의해 처리되는 경우 연결 유형 HINTERNET 핸들에서 프록시 사용자 이름 및 암호를 설정합니다. 즉, InternetConnect 호출에 의해 생성된 핸들은 이 HINTERNET 핸들에서 파생된 모든 호출이 동일한 프록시 사용자 이름과 암호를 사용하도록 허용합니다. HTTPOpenRequest에서 HINTERNET 핸들을 만들 때마다 프록시 사용자 이름 및 암호를 설정하려면 추가적인 불필요한 오버헤드가 필요합니다. 애플리케이션에서 인증이 필요한 프록시를 사용하는 경우 모든 새 연결에서 프록시 자격 증명을 설정해야 합니다.

옵션 설정 또는 검색

사용할 인터넷 옵션 및 HINTERNET 핸들을 결정한 경우 해당 인터넷 옵션을 검색합니다. 옵션을 설정하거나 검색하려면 InternetQueryOption 또는 InternetSetOption을 호출합니다.

HINTERNET 핸들의 범위

인터넷 옵션을 설정하거나 검색하는 데 사용되는 HINTERNET 핸들은 옵션이 유효한 작업을 결정합니다.

이러한 핸들에는 다음 세 가지 수준이 있습니다.

  • 루트 HINTERNET 핸들(InternetOpen 호출로 생성됨)에는 WinINet의 이 instance 영향을 주는 모든 인터넷 옵션이 포함됩니다.
  • HINTERNET 은 서버에 연결하는 핸들( InternetConnect 호출로 생성됨)
  • HINTERNET 은 특정 서버의 리소스 또는 리소스 열거와 관련된 핸들입니다.

애플리케이션은 다양한 HINTERNET 핸들 외에도 NULL을 사용하여 인터넷 Explorer 및 WinINet 함수에서 사용하는 인터넷 옵션의 기본값을 설정하거나 검색할 수 있습니다. NULL을 핸들로 사용할 때 인터넷 옵션을 설정하면 현재 레지스트리에 저장된 옵션의 기본값이 변경됩니다. 클라이언트 애플리케이션은 레지스트리 함수를 사용하여 인터넷 옵션의 기본값을 변경하면 안 됩니다. 나중에 옵션 저장 방법의 구현을 변경할 수 있기 때문입니다.

다음 표에는 HINTERNET 핸들 유형과 연결된 인터넷 옵션의 scope 나열되어 있습니다.

핸들 형식 범위
NULL 인터넷 Explorer 대한 기본 옵션 설정입니다.
INTERNET_HANDLE_TYPE_CONNECT_FTP FTP 서버에 대한 이 연결에 대한 옵션 설정입니다. 이러한 옵션은 파일 다운로드와 같이 이 HINTERNET 핸들에서 시작된 모든 작업에 영향을 줍니다.
INTERNET_HANDLE_TYPE_CONNECT_GOPHER Gopher 서버에 대한 이 연결에 대한 옵션 설정입니다. 이러한 옵션은 파일 다운로드와 같이 이 HINTERNET 핸들에서 시작된 모든 작업에 영향을 줍니다. 참고: Windows XP 및 Windows Server 2003 R2 및 이전 버전에만 해당합니다.
INTERNET_HANDLE_TYPE_CONNECT_HTTP HTTP 서버에 대한 이 연결에 대한 옵션 설정입니다. 이러한 옵션은 파일 다운로드와 같이 이 HINTERNET 핸들에서 시작된 모든 작업에 영향을 줍니다.
INTERNET_HANDLE_TYPE_FILE_REQUEST 이 파일 요청과 연결된 옵션 설정입니다.
INTERNET_HANDLE_TYPE_FTP_FILE 이 FTP 리소스 다운로드와 관련된 옵션 설정입니다.
INTERNET_HANDLE_TYPE_FTP_FILE_HTML HTML 형식의 이 FTP 리소스 다운로드와 관련된 옵션 설정입니다.
INTERNET_HANDLE_TYPE_FTP_FIND FTP 서버에서 이 파일 검색과 관련된 옵션 설정입니다.
INTERNET_HANDLE_TYPE_FTP_FIND_HTML HTML 형식의 FTP 서버에서 이 파일 검색과 관련된 옵션 설정입니다.
INTERNET_HANDLE_TYPE_GOPHER_FILE 이 Gopher 리소스 다운로드와 관련된 옵션 설정입니다. 참고: Windows XP 및 Windows Server 2003 R2 및 이전 버전에만 해당합니다.
INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML HTML 형식의 이 Gopher 리소스 다운로드와 관련된 옵션 설정입니다. 참고: Windows XP 및 Windows Server 2003 R2 및 이전 버전에만 해당합니다.
INTERNET_HANDLE_TYPE_GOPHER_FIND Gopher 서버에서 이 파일 검색과 관련된 옵션 설정입니다. 참고: Windows XP 및 Windows Server 2003 R2 및 이전 버전에만 해당합니다.
INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML HTML 형식의 Gopher 서버에서 이 파일 검색과 관련된 옵션 설정입니다. 참고: Windows XP 및 Windows Server 2003 R2 및 이전 버전에만 해당합니다.
INTERNET_HANDLE_TYPE_HTTP_REQUEST 이 HTTP 요청과 연결된 옵션 설정입니다.
INTERNET_HANDLE_TYPE_INTERNET WinINet 함수의 이 instance 연결된 옵션 설정입니다.

개별 옵션 설정

설정할 인터넷 옵션과 이러한 옵션의 영향을 받는 scope 결정한 후에는 인터넷 옵션을 설정하는 것이 복잡하지 않습니다. 원하는 HINTERNET 핸들, 인터넷 옵션 플래그 및 설정하려는 정보가 포함된 버퍼를 사용하여 InternetSetOption 함수를 호출하기만 하면 됩니다.

다음 예제에서는 지정된 HINTERNET 핸들에서 프록시 사용자 이름 및 암호를 설정하는 방법을 보여 드립니다.

// strUsername is a string buffer of cchMax characters or less.
// It contains the proxy user name.
size_t cchMax = 80;
size_t cchUserLength, cchPasswordLength;
HRESULT hr = StringCchLength(strUsername, cchMax, &cchUserLength);

if (SUCCEEDED(hr))
{
   // hOpen is the HINTERNET handle created by InternetConnect.
   InternetSetOption(hConnect, INTERNET_OPTION_PROXY_USERNAME,
      strUsername, DWORD(cchUserLength)+1);
}
else
{
   // Insert error handling code here.
}

// strPassword is the string buffer that contains the proxy password.
hr = StringCchLength(strPassword, cchMax, &cchPasswordLength);

InternetSetOption(hOpen, INTERNET_OPTION_PROXY_PASSWORD,
    strPassword, DWORD(cchPasswordLength)+1);

개별 옵션 검색

InternetQueryOption 함수를 사용하여 인터넷 옵션을 검색할 수 있습니다. 인터넷 옵션을 검색하려면 다음을 수행합니다.

  1. 인터넷 옵션 정보를 검색하는 데 필요한 버퍼 크기를 결정합니다.

    버퍼 크기는 버퍼의 주소에 NULL 을 사용하고 버퍼 크기를 0으로 전달하여 확인할 수 있습니다.

    DWORD dwSize;
    InternetQueryOption(NULL, INTERNET_OPTION_USER_AGENT, NULL, &dwSize);
    

    InternetQueryOption에서 반환되는 값은 정보를 검색하는 데 필요한 메모리 양(바이트)입니다.

  2. 버퍼에 대한 메모리를 할당합니다.

    char *lpszData;
    lpszData = new char[dwSize];
    
  3. 데이터를 검색합니다.

    InternetQueryOption( NULL, 
                         INTERNET_OPTION_USER_AGENT,
                         lpszData, &dwSize );
    
  4. 메모리를 해제합니다.

    delete [] lpszData;
    

전체 샘플

다음은 이전 섹션에서 사용된 전체 샘플입니다. 이 샘플에서는 기본 사용자 에이전트 문자열을 검색하는 방법을 보여줍니다.

// This call determines the required buffer size.
DWORD dwSize;
InternetQueryOption(NULL, INTERNET_OPTION_USER_AGENT, NULL, &dwSize);

// Allocate the necessary memory.
char *lpszData;
lpszData = new char[dwSize];

// Call InternetQueryOption again with the provided buffer.
InternetQueryOption( NULL, 
                     INTERNET_OPTION_USER_AGENT,
                     lpszData, &dwSize );

// Insert code here to use the user agent string data.

// Free the allocated memory.
delete [] lpszData;

연결 옵션 설정

인터넷 Explorer 5 이상에서는 특정 연결에서 인터넷 옵션을 설정할 수 있습니다. 이전에는 모든 연결이 동일한 인터넷 옵션 설정을 공유했습니다. 특정 연결에 대한 옵션을 설정하려면 다음을 수행합니다.

  1. INTERNET_PER_CONN_OPTION_LIST 구조를 만듭니다.
  2. 연결에 대해 설정하려는 개별 인터넷 옵션에 대한 메모리를 할당합니다.
  3. INTERNET_PER_CONN_OPTION 구조체에서 옵션을 설정합니다.
  4. InternetSetOption을 사용하여 옵션을 설정합니다.

다음 코드 예제에서는 LAN 연결에 대한 프록시 데이터를 설정하는 방법을 보여줍니다.

BOOL SetConnectionOptions()
{
    INTERNET_PER_CONN_OPTION_LIST list;
    BOOL    bReturn;
    DWORD   dwBufSize = sizeof(list);

    // Fill the list structure.
    list.dwSize = sizeof(list);

    // NULL == LAN, otherwise connectoid name.
    list.pszConnection = NULL;

    // Set three options.
    list.dwOptionCount = 3;
    list.pOptions = new INTERNET_PER_CONN_OPTION[3];

    // Ensure that the memory was allocated.
    if(NULL == list.pOptions)
    {
        // Return FALSE if the memory wasn't allocated.
        return FALSE;
    }

    // Set flags.
    list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
    list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT |
        PROXY_TYPE_PROXY;

    // Set proxy name.
    list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
    list.pOptions[1].Value.pszValue = TEXT("https://proxy:80");

    // Set proxy override.
    list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
    list.pOptions[2].Value.pszValue = TEXT("local");

    // Set the options on the connection.
    bReturn = InternetSetOption(NULL,
        INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);

    // Free the allocated memory.
    delete [] list.pOptions;

    return bReturn;
}

연결 옵션 검색

인터넷 Explorer 5 이상에서는 특정 연결에서 인터넷 옵션을 검색할 수 있습니다. 특정 연결에서 옵션을 검색하려면 다음을 수행합니다.

  1. INTERNET_PER_CONN_OPTION_LIST 구조를 만듭니다.
  2. 연결에서 검색할 개별 인터넷 옵션에 대한 메모리를 할당합니다.
  3. INTERNET_PER_CONN_OPTION 구조를 사용하여 옵션을 지정합니다.
  4. InternetQueryOption을 사용하여 옵션을 검색합니다.
  5. 옵션 데이터를 활용합니다.
  6. GlobalFree 함수를 사용하여 옵션 데이터를 저장하도록 할당된 메모리를 해제합니다.

참고

WinINet은 서버 구현을 지원하지 않습니다. 또한 서비스에서 사용하면 안 됩니다. 서버 구현 또는 서비스의 경우 WinHTTP(Microsoft Windows HTTP 서비스)를 사용합니다.

인증 처리

HINTERNET 핸들