Как программно запрос и установка параметров прокси-сервера в обозревателе Internet Explorer

Переводы статьи Переводы статьи
Код статьи: 226473 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

Статья объясняет необходимые действия для программным способом запроса и задать параметры настройки прокси-сервера для обозревателя Internet Explorer.

В Internet Explorer 4.x и более ранних версий InternetSetOption и InternetQueryOption API-интерфейсы используются с флагом INTERNET_OPTION_PROXY. Хотя этот параметр будет по-прежнему работать в Internet Explorer 5, в новой версии представлены различные варианты подключения. С учетом этого флага INTERNET_OPTION_PROXY будет возвращать только параметр «static» прокси-сервера. Статический параметр — это сведения о сервере прокси, хранящиеся в куст HKEY_CURRENT_USER таким же образом, он был в Internet Explorer версии 4.0

Примечание INTERNET_OPTION_PROXY не меняются параметры. Это делается для текущего процесса только в том случае, когда используется дескриптор NULL. Тем не менее его можно также изменить параметры отдельно для каждого сеанса Если дескриптор недопустимый сеанс отправляется в (сеанс, дескрипторы полученных с помощью API-Интерфейс InternetOpen()).

Если в Internet Explorer 5, по умолчанию указан параметр другое подключение (подключение удаленного доступа), возможно, что сведения о прокси-сервера, можно получить с помощью INTERNET_OPTION_PROXY флаг может быть неправильным в текущем сеансе обозревателя Internet Explorer. По этой причине в Internet Explorer 5 рекомендуется вместо этого использовать INTERNET_OPTION_PER_CONNECTION_OPTION.

Примечание INTERNET_OPTION_PER_CONNECTION_OPTION в результате параметры, чтобы изменить на всей системе при использовании дескриптора NULL. Чтобы правильно отражают глобальный прокси-сервер, необходимо вызвать метод InternetSetOption функции с помощью флага INTERNET_OPTION_REFRESH. Или, чтобы задать параметры отдельно для каждого сеанса, допустимый дескриптор может использоваться.

Примечание Он по-прежнему можно изменять сведения о прокси для whgke процесса без влияния на параметры глобального компьютера в Internet Explorer 5 и более поздних версий. Для этого необходимо вызвать метод InternetSetOption функция маркер, возвращенный InternetOpen функции с помощью параметра INTERNET_OPTION_PER_CONNECTION_OPTION. В следующем примере кода изменяет прокси для всего процесса, даже если hInternet Дескриптор будет закрыт и не используется для фактического запроса.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...);
InternetCloseHandle (hInternet);

Дополнительная информация

В Internet Explorer 4.x механизмом для запроса сведений о прокси-сервера будет выглядеть примерно следующим образом:
unsigned long        nSize = 4096;
char                 szBuf[4096] = { 0 };
INTERNET_PROXY_INFO* pInfo = (INTERNET_PROXY_INFO*)szBuf;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PROXY, pInfo, &nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
				
В Internet Explorer 5 рекомендуется использовать код, аналогичный приведенному ниже:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[5];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS;
Option[2].dwOption = INTERNET_PER_CONN_FLAGS;
Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 5;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
   if(Option[0].Value.pszValue != NULL)
   printf("%s\n", Option[0].Value.pszValue);

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_PROXY_URL) == PROXY_TYPE_AUTO_PROXY_URL)
  printf("PROXY_TYPE_AUTO_PROXY_URL\n");

if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_DETECT) == PROXY_TYPE_AUTO_DETECT)
   printf("PROXY_TYPE_AUTO_DETECT\n");

INTERNET_VERSION_INFO      Version;
nSize = sizeof(INTERNET_VERSION_INFO);

InternetQueryOption(NULL, INTERNET_OPTION_VERSION, &Version, &nSize);

if(Option[0].Value.pszValue != NULL)
   GlobalFree(Option[0].Value.pszValue);

if(Option[3].Value.pszValue != NULL)
   GlobalFree(Option[3].Value.pszValue);

if(Option[4].Value.pszValue != NULL)
   GlobalFree(Option[4].Value.pszValue);
				
Приведенный выше код задает соединение, задав строку pszConnection в структуре INTERNET_PER_CONN_OPTION_LIST. Задав эту строку NULL, будут извлечены сведения о конфигурации по умолчанию (или локальной сети) параметры.

Первый вариант (параметра [0] INTERNET_PER_CONN_AUTOCONFIG_URL) возвращает URL-адрес, указанный для автоматической настройки прокси-сервера. Второй вариант (параметра [1] INTERNET_PER_CONN_AUTODISCOVERY_FLAG) обнаруживает ли такой параметр включен или не для указанного соединения. Третий параметр определяет, какая комбинация флагов были установлены для данного конкретного подключения. Последние две команды соответствовать ту же информацию, как извлеченные осталась INTERNET_OPTION_PROXY было использовано в Internet Explorer 4.x.

Как можно также увидеть, параметры, которые потенциально могут возвращать значения строки будут освобождены с помощью GlobalFree(). Это обусловлено тем, что буферы строк размещаются автоматически библиотекой WININET и это программисту, чтобы освободить буфер после его использования.

Для получения данных для различных соединений, просто измените строку List.pszConnection для указания записи параметров удаленного доступа, вы заинтересованы его.

Аналогичным образом, чтобы задать сведения о прокси-сервера, можно использовать тот же метод, но с InternetSetOption(), например:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[1];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
Option[0].Value.pszValue = "http://myproxy:8080";

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());

				
Еще раз выше примера приведет к изменению по умолчанию (или локальной сети) параметры (List.pszConnection == NULL). В образце сведения о сервере «статический» прокси изменен на «http://myproxy» на порту 8080. Аналогичным образом можно изменить URL-адрес автоматической конфигурации:
INTERNET_PER_CONN_OPTION_LIST    List;
INTERNET_PER_CONN_OPTION         Option[2];
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);

Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
Option[0].Value.pszValue = "http://myserver/get_proxy_info.dll";
Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
Option[1].Value.dwValue = PROXY_TYPE_AUTO_PROXY_URL;

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
List.pszConnection = NULL;
List.dwOptionCount = 2;
List.dwOptionError = 0;
List.pOptions = Option;

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
   printf("InternetQueryOption failed! (%d)\n", GetLastError());
				
При настройке Internet Explorer использовать прокси-сервер для HTTP и прямой для других протоколов, выполните с помощью кода.

Примечание Буфер, который передается в INTERNET_PER_CONN_PROXY_SERVER имеет параметры для каждого протокола (этот код устанавливает только HTTP и все другие протоколы использовать прямое подключение).

Примечание INTERNET_PER_CONN_FLAGS задает значение для обоих типов прокси (прямым и через прокси-сервер) в один элемент массива список параметров, как показано ниже в коде.

Примечание Необходимо или эти флаги в одном месте. Если поместить эти флаги в другой элемент списка, они будут корректно (параметры Internet Explorer), но будет работать только один из флагов (первый, имеет значение).
int main(int argc, char * argv[]) 
{ 
char buff[256] = "http=http://<ProxyServerName>:80"; 
// To include server for FTP, HTTPS, and so on, use the string
// (ftp=http://<ProxyServerName>:80; https=https://<ProxyServerName>:80) 
INTERNET_PER_CONN_OPTION_LIST    List; 
INTERNET_PER_CONN_OPTION         Option[3]; 
unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 

Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER; 
Option[0].Value.pszValue = buff; 

Option[1].dwOption = INTERNET_PER_CONN_FLAGS; 
Option[1].Value.dwValue = PROXY_TYPE_PROXY; 
Option[1].Value.dwValue |= PROXY_TYPE_DIRECT; 
// This option sets all the possible connection types for the client. 
// This case specifies that the proxy can be used or direct connection is possible.

Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS; 
Option[2].Value.pszValue = "<local>"; 

 

List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); 
List.pszConnection = NULL; 
List.dwOptionCount = 3; 
List.dwOptionError = 0; 
List.pOptions = Option; 

if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize)) 
printf("InternetSetOption failed! (%d)\n", GetLastError()); 

InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL); 
//The connection settings for other instances of Internet Explorer. 

return 0; 

}
				
В примере выше (снова по умолчанию или настройки локальной сети) необходимо указать URL настройки прокси-сервера автоматически и устанавливать флаг параметр для включения автоматической конфигурации прокси-сервера.

Ссылки

Интерфейс API WinInet документации MSDN, апреля 1999

Свойства

Код статьи: 226473 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Internet Explorer 4.01 Service Pack 1
Ключевые слова: 
kbhowto kbmt KB226473 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:226473
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com