Настройка и получение параметров браузера

В этом разделе описывается установка и получение параметров Браузера с помощью функций InternetSetOption и InternetQueryOption .

Параметры браузера могут быть установлены в указанном дескриптоле HINTERNET или из нее с помощью текущих параметров в Microsoft Internet Обозреватель.

Этапы реализации

Чтобы задать или получить параметры браузера, выполните следующие действия:

Выбор параметров браузера

Так как существует так много вариантов браузера, важно выбрать правильные варианты. Многие параметры браузера влияют на поведение функций WinINet и Обозреватель Интернета:

Например, вы можете:

  • Обработайте обычную проверку подлинности сервера и прокси-сервера, задав имена пользователей и пароли.
  • Задайте или получите строку агента пользователя, используемую серверами для идентификации функций клиентского приложения или браузера.
  • Получение типа дескриптора указанного дескриптора HINTERNET .

Дополнительные сведения и список параметров браузера см. в разделе Флаги параметров.

В Internet Обозреватель 5 и более поздних версиях некоторые параметры можно задать или получить из определенного подключения к Интернету с помощью структур INTERNET_PER_CONN_OPTION_LIST и INTERNET_PER_CONN_OPTION. Дополнительные сведения и список параметров, которые можно задать или получить из определенного подключения к Интернету, см. в разделе элемент dwOptionsструктуры INTERNET_PER_CONN_OPTION .

Выбор дескриптора HINTERNET

Дескриптор HINTERNET, используемый для задания или получения параметров браузера, определяет область операции. Все дескрипторы, созданные с помощью этого дескриптора, наследуют параметры, заданные для этого дескриптора.

Например, клиентским приложениям, которым требуется прокси-сервер с проверкой подлинности, вероятно, не требуется задавать имя пользователя и пароль прокси-сервера каждый раз, когда приложение пытается получить доступ к интернет-ресурсу. Если все запросы к заданному соединению обрабатываются с помощью одного прокси-сервера, установка имени пользователя и пароля прокси-сервера в дескрипторе типа подключения HINTERNET , то есть дескрипторе, созданном вызовом InternetConnect, позволит любым вызовам, производным от этого дескриптора HINTERNET , использовать одно и то же имя пользователя и пароль прокси-сервера. Установка имени пользователя и пароля прокси-сервера при каждом создании дескриптора HINTERNETс помощью HttpOpenRequest потребует дополнительных и ненужных затрат. Имейте в виду, что если приложение использует прокси-сервер, требующий проверки подлинности, оно должно задавать учетные данные прокси-сервера при каждом новом подключении.

Установка или получение параметров

Определив, какие свойства браузера и hinternet дескриптор следует использовать, получите эти параметры браузера. Чтобы задать или получить параметры, вызовите InternetQueryOption или InternetSetOption.

Область дескриптора HINTERNET

Дескриптор HINTERNET, используемый для задания или получения параметров браузера, определяет действия, для которых эти параметры являются допустимыми.

Эти дескрипторы имеют три уровня:

  • Корневой дескриптор HINTERNET (созданный вызовом InternetOpen) будет содержать все параметры браузера, влияющие на этот экземпляр WinINet.
  • HINTERNET дескрипторов, подключающихся к серверу (созданных вызовом InternetConnect)
  • HINTERNET дескрипторов, связанных с ресурсом или перечислением ресурсов на определенном сервере.

Помимо различных дескрипторов HINTERNET, приложение также может использовать ЗНАЧЕНИЕ NULL для задания или получения значений по умолчанию параметров Браузера, используемых функциями Internet Обозреватель и WinINet. Установка параметров браузера при использовании null в качестве дескриптора изменяет значения по умолчанию параметров, которые в настоящее время хранятся в реестре. Клиентские приложения не должны использовать функции реестра для изменения значений по умолчанию параметров браузера, так как реализация способа хранения параметров может быть изменена в будущем.

В следующей таблице перечислены типы дескрипторов HINTERNET и область связанных с ними параметров браузера.

Тип дескриптора Область
NULL Параметры по умолчанию для Обозреватель Интернета.
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 Параметры параметров, связанные с этой загрузкой ресурса FTP, в формате HTML.
INTERNET_HANDLE_TYPE_FTP_FIND Параметры, связанные с этим поиском файлов на FTP-сервере.
INTERNET_HANDLE_TYPE_FTP_FIND_HTML Параметры, связанные с этим поиском файлов на FTP-сервере в формате HTML.
INTERNET_HANDLE_TYPE_GOPHER_FILE Параметры параметров, связанные с скачиванием этого ресурса Gopher. Примечание: Только Windows XP и Windows Server 2003 R2 и более ранних версий.
INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML Параметры параметров, связанные с этой загрузкой ресурса Gopher, в формате HTML. Примечание: Только Windows XP и Windows Server 2003 R2 и более ранних версий.
INTERNET_HANDLE_TYPE_GOPHER_FIND Параметры, связанные с этим поиском файлов на сервере Gopher. Примечание: Только Windows XP и Windows Server 2003 R2 и более ранних версий.
INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML Параметры, связанные с этим поиском файлов на сервере Gopher в формате HTML. Примечание: Только Windows XP и Windows Server 2003 R2 и более ранних версий.
INTERNET_HANDLE_TYPE_HTTP_REQUEST Параметры параметра, связанные с этим HTTP-запросом.
INTERNET_HANDLE_TYPE_INTERNET Параметры параметров, связанные с этим экземпляром функций WinINet.

Настройка отдельных параметров

После определения параметров браузера, которые вы хотите задать, и область, на которые вы хотите повлиять эти параметры, настройка параметров браузера не будет сложной задачей. Все, что вам нужно сделать, — это вызвать функцию InternetSetOption с требуемым дескриптором HINTERNET , флагом параметра Internet и буфером, содержащим нужные сведения.

В следующем примере показано, как задать имя пользователя и пароль прокси-сервера для указанного дескриптора 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 для адреса буфера и передав ему нулевой размер буфера.

    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;

Настройка параметров подключения

В Internet Обозреватель 5 и более поздних версий можно задать параметры браузера для определенного подключения. Ранее все подключения использовали одни и те же параметры параметров Интернета. Чтобы задать параметры для определенного подключения, выполните следующие действия.

  1. Создание структуры INTERNET_PER_CONN_OPTION_LIST .
  2. Выделите память для отдельных параметров браузера, которые вы хотите задать для подключения.
  3. Задайте параметры в INTERNET_PER_CONN_OPTION структурах.
  4. Задайте параметры с помощью InternetSetOption.

В следующем примере кода показано, как задать данные прокси-сервера для подключения по локальной сети.

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;
}

Получение параметров подключения

В Internet Обозреватель 5 и более поздних версий параметры браузера можно получить из определенного подключения. Чтобы получить параметры из определенного подключения, выполните следующие действия.

  1. Создайте структуру INTERNET_PER_CONN_OPTION_LIST .
  2. Выделите память для отдельных параметров Браузера, которые будут извлекаться из подключения.
  3. Укажите параметры с помощью INTERNET_PER_CONN_OPTION структур.
  4. Получите параметры с помощью InternetQueryOption.
  5. Используйте данные параметра.
  6. Освободите память, выделенную для хранения данных параметра, с помощью функции GlobalFree .

Примечание

WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать из службы. Для серверных реализаций или служб используйте службы Microsoft Windows HTTP (WinHTTP).

Обработка проверки подлинности

Дескрипторы HINTERNET