Jak programově dotazu a nastavení serveru proxy ve skupinovém rámečku Internet Explorer

Překlady článku Překlady článku
ID článku: 226473 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

V tomto článku je popsán postup nezbytný programově dotaz a nastavit informace o nastavení serveru proxy pro aplikaci Internet Explorer.

V části Internet Explorer 4.x a starší InternetSetOption a InternetQueryOption API použita s příznakem INTERNET_OPTION_PROXY. Při této možnosti budou stále fungovat pod Internet Explorer 5, více možností připojení byly zavedeny v nové verzi. Dané tento příznak INTERNET_OPTION_PROXY vrátí pouze nastavení serveru proxy "statické". Možnost statické je uložen pod podregistru HKEY_CURRENT_USER mnohem stejným způsobem, byla v části Internet Explorer 4.0 informace o serveru proxy

Poznámka: INTERNET_OPTION_PROXY nezmění nastavení trvale. Nemá toto pro aktuální proces pouze při použití NULOVÝ popisovač. Však jej můžete také změnit nastavení na základě za relace, pokud popisovač platný relace je odeslána v úchyty jsou získána pomocí API InternetOpen() (relace).

Pokud v části Internet Explorer 5 možnost jiné připojení (například telefonické připojení) zadali jako výchozí, je možné, že informace o proxy serveru získat pomocí INTERNET_OPTION_PROXY příznak může být nesprávná Internet Explorer pro aktuální relaci. Z tohoto důvodu pod Internet Explorer 5 je doporučeno INTERNET_OPTION_PER_CONNECTION_OPTION použit místo.

Poznámka: INTERNET_OPTION_PER_CONNECTION_OPTION způsobí nastavení změněno na základě celého systému při použití NULOVÝ popisovač. Nastavení globální proxy odrážet správně, je třeba zavolat funkci InternetSetOption s příznakem možnost INTERNET_OPTION_REFRESH. Nebo nastavení na jednotlivé za relace, můžete použit popisovač platný relace.

Poznámka: Je možné změnit informace o serveru proxy pro proces whgke bez ovlivnění nastavení globální počítače v aplikaci Internet Explorer 5 a novější verze. Chcete-li to provést, je třeba zavolat funkci InternetSetOption popisovač vrácený funkcí InternetOpen pomocí možnosti INTERNET_OPTION_PER_CONNECTION_OPTION. Následující příklad kódu změní proxy celý proces, přestože úchyt hInternet uzavřena a nepoužívá pro skutečný požadavek.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...);
InternetCloseHandle (hInternet);

Další informace

V části Internet Explorer 4.x typické mechanismus dotaz proxy informace by vypadat přibližně takto:
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());
				
Pod Internet Explorer 5 je doporučený způsob použití kód podobný níže:
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);
				
kód výše určuje připojení nastavením řetězec pszConnection ve struktuře INTERNET_PER_CONN_OPTION_LIST. Nastavením tento řetězec NULL konfigurační informace pro výchozí (nebo LAN) načíst nastavení.

První možnost (možnost [0] INTERNET_PER_CONN_AUTOCONFIG_URL) vrátí URL zadané pro automatickou konfiguraci proxy serveru. Druhá možnost (možnost [1] INTERNET_PER_CONN_AUTODISCOVERY_FLAG) zjistí, zda je povolena možnost rozpoznat automatického nebo není pro zadané připojení. Třetí možnost lze určit, jaké kombinace příznaků byly nastaveny pro konkrétní připojení. Poslední dvě možnosti odpovídají stejné informace jako načtená whe INTERNET_OPTION_PROXY byla použita v aplikaci Explorer 4.x.

Jako se také zobrazí, jsou možnosti, které mohou potenciálně vracet hodnoty řetězce uvolněno pomocí GlobalFree(). Důvodem je přidělena vyrovnávací paměť řetězce můžete knihovnou WININET a je programátor uvolnit vyrovnávací paměti po jeho použití.

Chcete-li získat informace pro jiné připojení, jednoduše změnit řetězec List.pszConnection odkazovat na položky nastavení telefonické nejste zájem jej.

Podobně, nastavit informace o proxy serveru použijete stejné techniky ale InternetSetOption() místo, například:
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());

				
jednou opakujte výše uvedené ukázkové změní výchozí (nebo LAN) nastavení (List.pszConnection == NULL). V ukázkové informace o serveru proxy "statické" změněn na "http://myproxy" na portu 8080. Podobně můžete také změnit URL automatické konfigurace:
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());
				
při konfiguraci aplikace Internet Explorer používat proxy server HTTP a přejít přímé jiné protokoly použít kód dodržovat.

Poznámka: Vyrovnávací paměti, která je předána INTERNET_PER_CONN_PROXY_SERVER má nastavení pro každý protokol (Tento kód nastaví pouze HTTP a všechny ostatní protokoly používat přímé připojení).

Poznámka: INTERNET_PER_CONN_FLAGS nastaví hodnotu pro oba typy proxy (přímo a prostřednictvím serveru proxy) v jeden prvek Array seznam Option jak je ukázáno níže v kódu.

Poznámka: Máte k OR tyto příznaky v jednom místě. Pokud tyto příznaky umístit do jiného prvku seznamu, jejich budou zobrazeny správně (Internet Explorer OPTIONS), ale bude fungovat pouze jedním z příznaků (první nastavena).
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; 

}
				
v ukázkové výše (znovu výchozí nebo nastavení LAN) máte zadat konfiguraci URL automatického serveru proxy a nastavit příznak možnost Povolit automatickou konfiguraci proxy.

Odkazy

MSDN WinInet API dokumentace Duben 1999

Vlastnosti

ID článku: 226473 - Poslední aktualizace: 10. dubna 2007 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • 128bitová verze aplikace Microsoft Internet Explorer 4.0
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 4.01 Service Pack 1
  • Microsoft Internet Explorer 5.0
  • Microsoft Windows Internet Services (WinInet)
Klíčová slova: 
kbmt kbhowto KB226473 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:226473
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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