인터넷 옵션 설정 및 검색
이 항목에서는 InternetSetOption 및 InternetQueryOption 함수를 사용하여 인터넷 옵션을 설정하고 검색하는 방법을 설명합니다.
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 함수를 사용하여 인터넷 옵션을 검색할 수 있습니다. 인터넷 옵션을 검색하려면 다음을 수행합니다.
인터넷 옵션 정보를 검색하는 데 필요한 버퍼 크기를 결정합니다.
버퍼 크기는 버퍼의 주소에 NULL 을 사용하고 버퍼 크기를 0으로 전달하여 확인할 수 있습니다.
DWORD dwSize; InternetQueryOption(NULL, INTERNET_OPTION_USER_AGENT, NULL, &dwSize);
InternetQueryOption에서 반환되는 값은 정보를 검색하는 데 필요한 메모리 양(바이트)입니다.
버퍼에 대한 메모리를 할당합니다.
char *lpszData; lpszData = new char[dwSize];
데이터를 검색합니다.
InternetQueryOption( NULL, INTERNET_OPTION_USER_AGENT, lpszData, &dwSize );
메모리를 해제합니다.
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 이상에서는 특정 연결에서 인터넷 옵션을 설정할 수 있습니다. 이전에는 모든 연결이 동일한 인터넷 옵션 설정을 공유했습니다. 특정 연결에 대한 옵션을 설정하려면 다음을 수행합니다.
- INTERNET_PER_CONN_OPTION_LIST 구조를 만듭니다.
- 연결에 대해 설정하려는 개별 인터넷 옵션에 대한 메모리를 할당합니다.
- INTERNET_PER_CONN_OPTION 구조체에서 옵션을 설정합니다.
- 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 이상에서는 특정 연결에서 인터넷 옵션을 검색할 수 있습니다. 특정 연결에서 옵션을 검색하려면 다음을 수행합니다.
- INTERNET_PER_CONN_OPTION_LIST 구조를 만듭니다.
- 연결에서 검색할 개별 인터넷 옵션에 대한 메모리를 할당합니다.
- INTERNET_PER_CONN_OPTION 구조를 사용하여 옵션을 지정합니다.
- InternetQueryOption을 사용하여 옵션을 검색합니다.
- 옵션 데이터를 활용합니다.
- GlobalFree 함수를 사용하여 옵션 데이터를 저장하도록 할당된 메모리를 해제합니다.
참고
WinINet은 서버 구현을 지원하지 않습니다. 또한 서비스에서 사용하면 안 됩니다. 서버 구현 또는 서비스의 경우 WinHTTP(Microsoft Windows HTTP 서비스)를 사용합니다.