DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 226473 - Dernière mise à jour: mardi 10 avril 2007 - Version: 4.0

 

Résumé

Cet article explique les nécessaires étapes pour interroger par programme et définir les informations de paramètre de proxy pour Internet Explorer.

Sous Internet Explorer 4.x et versions antérieures, les API de InternetQueryOption et InternetSetOption sont utilisés avec l'indicateur INTERNET_OPTION_PROXY. Bien que cette option fonctionnent toujours titre de Internet Explorer 5, plusieurs options de connexion ont été introduites dans la nouvelle version. Compte tenu de ceci, l'indicateur INTERNET_OPTION_PROXY renvoie uniquement le serveur proxy "static" définition. L'option statique est les informations du serveur proxy stockées sous la ruche HKEY_CURRENT_USER de la même façon qu'il était sous Internet Explorer 4.0

Remarque INTERNET_OPTION_PROXY ne modifie pas définitivement les paramètres. Cela pour le processus en cours uniquement lorsqu'un descripteur NULL est utilisé. Toutefois, il peut également modifier les paramètres sur une base par session si un descripteur de session valide est envoyé dans (session poignées sont obtenues à l'aide de l'API InternetOpen()).

Si titre de Internet Explorer 5, vous avez spécifié une option de connexion différentes (par exemple, une connexion d'accès à distance) comme valeur par défaut, il est possible que les informations de proxy que vous obtenez à l'aide de la INTERNET_OPTION_PROXY signale est incorrect pour la session Internet Explorer en cours. Pour cette raison, titre de Internet Explorer 5, il est recommandé d'utiliser plutôt le INTERNET_OPTION_PER_CONNECTION_OPTION.

Remarque INTERNET_OPTION_PER_CONNECTION_OPTION, les paramètres à modifier un système à l'échelle d'un descripteur NULL est utilisé. Afin de refléter correctement les paramètres de proxy global, vous devez appeler la fonction InternetSetOption avec l'indicateur d'option INTERNET_OPTION_REFRESH. Ou, pour définir les paramètres de session par session, un descripteur de session valide peut être utilisé.

Remarque Il est toujours possible de modifier les informations de proxy pour le processus whgke sans affecter les paramètres de machine global dans Internet Explorer 5 et versions ultérieures. Pour ce faire, vous devez appeler la fonction InternetSetOption sur le handle renvoyé par la fonction InternetOpen à l'aide de l'option INTERNET_OPTION_PER_CONNECTION_OPTION. L'exemple de code suivant modifie le proxy pour l'ensemble du processus même si le handle hInternet est fermé et n'est pas utilisé pour la demande réelle.
HINTERNET hInternet = InternetOpen(szAppName, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
InternetSetOption(hInternet, INTERNET_OPTION_PER_CONNECTION_OPTION, ...);
InternetCloseHandle (hInternet);

Plus d'informations

Sous Internet Explorer 4.x, un mécanisme standard pour demander les informations de proxy ressemblerait à ceci :
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());
				
Titre de Internet Explorer 5, la méthode recommandée consiste à utiliser du code similaire à ci-dessous :
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);
				
le code ci-dessus spécifie la connexion en définissant la chaîne pszConnection dans la structure INTERNET_PER_CONN_OPTION_LIST. En attribuant la valeur NULL de cette chaîne, les informations de configuration à extraire pour la valeur par défaut (ou LAN) paramètres.

La première option (option INTERNET_PER_CONN_AUTOCONFIG_URL [0]) renvoie l'URL spécifiée pour la configuration automatique du serveur proxy. La deuxième option (option INTERNET_PER_CONN_AUTODISCOVERY_FLAG [1]) détecte si l'auto détection est activée ou non pour la connexion spécifiée. La troisième option détermine quelle combinaison d'indicateurs ont été définies pour cette connexion particulière. Les deux dernières options correspondant aux informations mêmes récupérée whe INTERNET_OPTION_PROXY a été utilisée dans Internet Explorer 4.x.

Comme vous également le voir, les options qui peuvent potentiellement retournent des valeurs de chaîne sont libérées à l'aide de GlobalFree(). Cela est dû au fait que les tampons de chaîne sont allouées pour vous par la bibliothèque WININET, et c'est au programmeur pour libérer de la mémoire tampon après l'avoir utilisé.

Pour obtenir des informations pour une connexion différente, simplement modifier la chaîne List.pszConnection pour pointer à l'entrée de paramètre à distance, vous êtes intéressés par elle.

De même, pour définir les informations de proxy, vous utiliserez la même technique, mais avec InternetSetOption() au lieu de cela, par exemple :
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());

				
une fois encore, l'exemple ci-dessus modifie les par défaut (ni les LAN) paramètres (List.pszConnection == NULL). L'exemple, les informations du serveur proxy «statique» sont modifiées en «http://myproxy» sur le port 8080. De même, vous pouvez également modifier l'URL de configuration automatique :
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());
				
lorsque vous configurez Internet Explorer pour utiliser un serveur proxy pour HTTP et passer directement d'autres protocoles, utilisez le code à suivre.

Remarque La mémoire tampon qui est passée à INTERNET_PER_CONN_PROXY_SERVER possède les paramètres pour chaque protocole (code définir HTTP uniquement et tous les autres connexion directe d'utilisation de protocoles).

Remarque Le INTERNET_PER_CONN_FLAGS définit la valeur pour les deux types de proxy (direct et par proxy) dans un seul élément de l'ensemble de la liste Options, comme indiqué dans le code ci-dessous.

Remarque Vous devez OR ces indicateurs dans un seul endroit. Si vous placez ces indicateurs dans un autre élément de liste, ils seront afficheront correctement (Internet Explorer OPTIONS), mais uniquement un des indicateurs (la première est définie) fonctionne.
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; 

}
				
Dans l'exemple ci-dessus (à nouveau la valeur par défaut ou paramètre de réseau local), vous devez spécifier l'URL de configuration de proxy automatique et de définir l'indicateur d'option pour permettre la configuration de proxy automatique.

Références

Documentation de MSDN API WinInet, avril 1999

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Internet Explorer 4.0 Édition 128 bits
  • 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)
Mots-clés : 
kbmt kbhowto KB226473 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 226473  (http://support.microsoft.com/kb/226473/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Article KB retiré.Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store