WinINet et WinHTTP

À quelques exceptions près, WinINet est un super-ensemble de WinHTTP. Lorsque vous devez choisir entre les deux, vous devez utiliser WinINet sauf si vous prévoyez une exécution dans un service ou un processus de type service nécessitant l’emprunt d’identité et l’isolation des sessions.

Comparaison des fonctionnalités

Caractéristique WinINet WinHTTP
cache d’identifiants. Permet à toutes les applications intégrées dans Windows Internet Explorer d’obtenir automatiquement les informations d’identification. Il permet également à une application s’exécutant en dehors d’Internet Explorer d’inviter/de spécifier les informations d’identification du serveur une seule fois. À partir de là, les demandes sont automatiques. oui Non
Demande d’informations d’identification. Fournit une API qui permet au code appelant d’inviter l’utilisateur à entrer des informations d’identification. oui Non
FTP oui Non
Prise en charge automatique/RAS. Il s’agit de fonctionnalités héritées. Utilisez Accès à distance à la place. oui Non
Zones. Intégration automatique à des zones de sécurité Internet Explorer. oui Non
prise en charge de l’IDNA. Prise en charge intégrée de la norme RFC IDNA/Punycode. oui oui
API Cookie Jar. Les cookies persistants et non persistants sont pris en charge. Toute application ou script peut l’utiliser pour afficher les mêmes cookies que le navigateur. oui Non
Prise en charge du mode protégé d’Internet Explorer oui Non
prise en charge de la décompression. Prise en charge des formats de compression gzip et deflate. oui oui
Prise en charge du téléversement par blocs. Le code client doit effectuer la segmentation. Non oui
Prise en charge de SOCKS4 (version 4 de SOCKS). N’inclut pas v4a. oui Non
Prise en charge de SOCKS5 (SOCKS version 5) Non Non
Envoi et réception bidirectionnels Non Non
E/S superposées Non Non
Prise en charge du schéma de fichier. Utile pour les scripts proxy avec un schéma de fichiers. oui Non
InternetOpenUrl. Code simplifié pour ouvrir une URL. oui Non
Prise en charge des services. Peut être exécuté à partir d’un service ou d’un compte de service. Non oui
Isolation de session. Les sessions distinctes n’ont pas d’impact les unes sur les autres. Non oui
Usurpation d’identité. Prend en charge l’appel alors qu’un thread usurpe l’identité d’un autre utilisateur. Non oui

Guide de décision rapide

Utilisez cet organigramme pour sélectionner la pile de client HTTP appropriée :

  1. Votre code s’exécute-t-il dans un service Windows, un processus système ou sous emprunt d’identité ?
    • Oui → Utiliser WinHTTP.
  2. Votre code est-il une application de bureau qui nécessite les paramètres de proxy des Options Internet (Internet Explorer) de l’utilisateur, des cookies ou des invites d’authentification ?
    • Oui → Utiliser WinINet.
  3. Écrivez-vous une application de bureau C++ moderne ou UWP/WinUI ?
  4. Écrivez-vous une application .NET ?
    • Oui → utiliser System.Net.Http.HttpClient.
  5. Avez-vous besoin d’une compatibilité multiplateforme ?
    • Oui → Utiliser libcurl ou une bibliothèque portable similaire.

Note

Quand utiliser ni WinINet ni WinHTTP : si vous créez une nouvelle application et que vous n’avez pas besoin d’une intégration Win32 héritée, préférez les alternatives modernes répertoriées ci-dessus. Ils offrent des API plus simples et une meilleure prise en charge asynchrone. Certaines alternatives offrent également des avantages supplémentaires : libcurl et .NET HttpClient sont multiplateformes ; La disponibilité de TLS 1.3 dépend de la pile TLS sous-jacente et de la configuration du système d’exploitation. Réservez WinHTTP/WinINet pour les scénarios qui nécessitent spécifiquement la prise en charge du service Win32, le partage d’informations d’identification du navigateur ou l’intégration de proxy profond.

Important

Rappel de sécurité : quelle que soit la pile HTTP que vous choisissez, ne désactivez jamais la validation de certificat TLS en production. WinHTTP et WinINet permettent d’ignorer les erreurs de certificat via des indicateurs, mais cela expose votre application à des attaques man-in-the-middle.