Comment faire pour interroger par programme et définir les paramètres de proxy dans Internet Explorer

Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.

Résumé

Cet article explique la procédure à suivre interroger par programme et de définir les informations de paramètres proxy pour Internet Explorer.

Sous Internet Explorer 4.x et versions antérieures, les InternetSetOption InternetQueryOption APIs sont utilisés avec l’indicateur INTERNET_OPTION_PROXY. Bien que cette option fonctionne sous Internet Explorer 5, plusieurs options de connexion ont été introduites dans la nouvelle version. Compte tenu de cela, l’indicateur INTERNET_OPTION_PROXY renvoie uniquement le serveur proxy « statique » paramètre. L’option statique est les informations du serveur proxy stockées dans 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. Il le fait pour le processus actuel 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é (poignées sont obtenues à l’aide de l’API InternetOpen() de session).


Si sous Internet Explorer 5, vous avez spécifié une option de connexion différentes (par exemple, une connexion à distance) par défaut, il est possible que les informations de proxy que vous obtenez à l’aide de la INTERNET_OPTION_PROXY indicateur peut être incorrecte pour la session en cours de Internet Explorer. Pour cette raison, dans Internet Explorer 5, il est recommandé que le INTERNET_OPTION_PER_CONNECTION_OPTION est utilisé à la place.

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


Remarque Il est toujours possible de modifier les informations de proxy pour le processus de whgke sans affecter les paramètres machine global dans Internet Explorer 5 et versions ultérieures. Pour ce faire, vous devez appeler la fonction InternetSetOption sur le handle qui est retourné 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 de hInternet est fermé et qu’il 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 interroger les informations de proxy peut ressembler à 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());

Sous Internet Explorer 5, il est recommandé d’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 de pszConnection dans la structure INTERNET_PER_CONN_OPTION_LIST. En définissant cette chaîne avec la valeur NULL, les informations de configuration seront récupérées par défaut (ou LAN) paramètres.

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

Comme vous le voyez également, les options qui peuvent retourner des valeurs de chaîne sont libérées à l’aide de GlobalFree(). C’est parce que les mémoire tampon de chaîne sont allouées pour vous par la bibliothèque de 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 autre connexion, il vous suffit de modifier la chaîne List.pszConnection pour pointer vers l’entrée de paramètre d’accès à distance, vous êtes intéressé il.

De même, pour définir les informations de proxy, vous utilisez 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 devient la valeur par défaut (ou LAN) paramètres (List.pszConnection == NULL). Dans l’exemple, les informations du serveur proxy « statique » sont modifiées pour « http://myproxy » sur le port 8080. De la même façon 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 aller directement pour d’autres protocoles, utilisez le code à suivre.

Remarque La mémoire tampon passée à INTERNET_PER_CONN_PROXY_SERVER possède les paramètres pour chaque protocole (ce code définit uniquement HTTP et tous les autres protocoles utiliser une connexion directe).

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

Remarque Vous devez OU ces indicateurs dans un seul endroit. Si vous placez ces indicateurs dans un autre élément de la liste, ils seront afficheront correctement (OPTIONS d’Internet Explorer), mais uniquement un des indicateurs (le premier défini) ne fonctionne pas.

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 les paramètres de réseau local), vous devez spécifier l’URL de configuration automatique proxy et définir l’indicateur d’option pour activer la configuration automatique du proxy.

Références

Documentation des API de WinInet MSDN, avril 1999
Propriétés

ID d'article : 226473 - Dernière mise à jour : 8 janv. 2017 - Révision : 1

Commentaires