WinINet ve WinHTTP

Birkaç özel durum dışında WinINet, WinHTTP'nin üst kümesidir. İkisi arasında seçim yaparken, kimliğe bürünme ve oturum yalıtımı gerektiren bir hizmet veya hizmet benzeri işlem içinde çalıştırmayı planlamadığınız sürece WinINetkullanmalısınız.

Özelliklerin karşılaştırması

Özellik WinINet WinHTTP
kimlik bilgisi önbelleği . Windows Internet Explorer'daki tüm yerleşik uygulamaların kimlik bilgilerini otomatik olarak almasına izin verir. Ayrıca, Internet Explorer dışında çalışan bir uygulamanın sunucu kimlik bilgilerini yalnızca bir kez istemesine/belirtmesine olanak tanır. Bundan sonra istekler otomatiktir. evet Hayır
Kimlik bilgisi istemi. Çağıran kodun kullanıcıdan kimlik bilgileri istemesine olanak tanıyan bir API sağlar. evet Hayır
FTP evet Hayır
otomatik arama/RAS desteği . Bu eski işlevselliktir. Bunun yerine Uzaktan Erişim kullanın. evet Hayır
Bölgeleri. Internet Explorer güvenlik bölgeleriyle otomatik tümleştirme. evet Hayır
IDNA desteği. IDNA RFC/Punycode için tümleşik destek. evet evet
Çerez Deposu API'leri. Kalıcı ve kalıcı olmayan tanımlama bilgileri desteklenir. Herhangi bir uygulama veya betik, tarayıcıyla aynı tanımlama bilgilerini görebilmek için bunu kullanabilir. evet Hayır
Korumalı mod IE desteği evet Hayır
Dekompresyon desteği. gzip ve deflate sıkıştırma şeması desteği. evet evet
Parçalı yükleme desteği. İstemci kodu parçalama işlemini yapmalıdır. Hayır evet
SOCKS4 (SOCKS sürüm 4) desteği. v4a içermez. evet Hayır
SOCKS5 (SOCKS sürüm 5) desteği Hayır Hayır
çift yönlü gönderme ve alma Hayır Hayır
Çakışan G/Ç Hayır Hayır
Dosya şeması desteği. Dosya şeması kullanan proxy betikleri için kullanışlıdır. evet Hayır
InternetOpenUrl . URL'yi açmak için basitleştirilmiş kod. evet Hayır
Hizmet desteği. Bir hizmetten veya hizmet hesabından çalıştırılabilir. Hayır evet
Oturum yalıtımı. Ayrı oturumlar birbirini etkilemez. Hayır evet
Kimliğe bürünme. İş parçacığı farklı bir kullanıcının kimliğine bürünüyorken çağrılmasını destekler. Hayır evet

Hızlı karar kılavuzu

Doğru HTTP istemci yığınını seçmek için bu akış çizelgesini kullanın:

  1. Kodunuz bir Windows hizmetinde mi, sistem işleminde mi yoksa kimliğe bürünme altında mı çalışıyor?
    • Evet → WinHTTP kullanın.
  2. Kodunuz kullanıcının İnternet Seçenekleri (IE) proxy ayarlarına, tanımlama bilgilerine veya kimlik bilgileri istemlerine ihtiyaç duyan bir masaüstü uygulaması mı?
    • Evet → WinINet kullanın.
  3. Modern bir C++ masaüstü mü yoksa UWP/WinUI uygulaması mı yazıyorsunuz?
  4. .NET uygulaması mı yazıyorsun?
    • Evet → System.Net.http.httpClient kullanın.
  5. Platformlar arası uyumluluğa mı ihtiyacınız var?
    • Evet → Libcurl veya benzer bir taşınabilir kitaplık kullanın.

Note

Ne zaman WinINet ne de WinHTTP kullanılmamalıdır — Yeni bir uygulama oluşturuyorsanız ve eski Win32 tümleştirmesi gerekmiyorsa, yukarıda listelenen modern alternatifleri tercih edin. Daha basit API'ler ve daha iyi eşzamansız destek sunarlar. Bazı alternatifler ek avantajlar da sunar: libcurl ve .NET HttpClient platformlar arasıdır; TLS 1.3 kullanılabilirliği, temel alınan TLS yığınına ve işletim sistemi yapılandırmasına bağlıdır. Win32 hizmet desteği, tarayıcı kimlik bilgisi paylaşımı veya derin ara sunucu tümleştirmesi gerektiren senaryolar için WinHTTP/WinINet'i ayırın.

Important

Güvenlik anımsatıcısı — Hangi HTTP yığınını seçerseniz seçin, üretimde TLS sertifika doğrulamayı hiçbir zaman devre dışı bırakmayın. Hem WinHTTP hem de WinINet, bayraklarla sertifika hatalarının yok sayılmasına izin verir, ancak bunu yapmak uygulamanızı araya giren adam saldırılarına maruz bırakır.