WinINet 與 WinHTTP

除了一些例外狀況,WinINet 是 winHTTP 超集。 當您在兩者之間進行選擇時,除非您打算在需要模擬和工作階段隔離的服務或類似服務的處理程序中執行,否則應使用 WinINet。

功能比較

特徵 WinINet WinHTTP
認證快取。 允許 Windows Internet Explorer 中的所有內建應用程式自動取得認證。 它也允許在 Internet Explorer 外部執行的應用程式只提示/指定伺服器的認證一次。 從那時起,請求就會自動送出。 是的
認證提示。 提供 API,可讓呼叫程式代碼提示使用者輸入認證。 是的
FTP 是的
自動串行/RAS 支援。 這是舊版功能。 請改用 遠端訪問 是的
區域。 自動與 Internet Explorer 安全性區域整合。 是的
IDNA 支援。 IDNA RFC/Punycode 的整合式支援。 是的 是的
Cookie Jar API。 支持持續性和非持續性 Cookie。 任何應用程式或腳本都可以使用此專案來查看與瀏覽器相同的 Cookie。 是的
IE 保護模式支援 是的
解壓縮支援。 支援 gzip 和 deflate 壓縮格式。 是的 是的
支援分塊上傳。 用戶端程式代碼必須執行區塊化。 是的
SOCKS4 (SOCKS 第 4 版) 支援。 不包含 v4a。 是的
SOCKS5 (SOCKS 第 5 版) 支援
雙向傳送和接收
重疊 I/O
檔案設定支援。 適用於具有檔案配置的 Proxy 腳本。 是的
InternetOpenUrl。 簡化的程式代碼以開啟 URL。 是的
服務支援。 可以從服務或服務帳戶執行。 是的
工作階段隔離。 各個工作階段彼此之間不會互相影響。 是的
冒充。 支援在執行緒正在模擬其他使用者時呼叫。 是的

快速決策指南

請使用此流程圖選擇合適的 HTTP 用戶端堆疊:

  1. 你的程式碼是在 Windows 服務、系統處理程序中執行,還是在模擬身分下執行?
    • 是的,→使用 WinHTTP。
  2. 你的程式碼是需要使用者的網路選項(IE)代理設定、Cookie 或憑證提示的桌面應用程式嗎?
    • 是的,→用 WinINet
  3. 你是在寫現代的 C++ 桌面或 UWP/WinUI 應用程式嗎?
  4. 你是在寫 .NET 應用程式嗎?
    • 是的,→使用 System.Net.Http.HttpClient
  5. 你需要跨平台相容性嗎?
    • 是的,→用 libcurl 或類似的可攜式函式庫。

Note

何時不使用 WinINet 或 WinHTTP — 如果你正在打造新應用程式且不需要舊有的 Win32 整合,建議選擇上述現代替代方案。 他們提供更簡單的 API 和更好的非同步支援。 部分替代方案也提供額外優勢:libcurl 與 .NET HttpClient 跨平台;TLS 1.3 的可用性取決於底層的 TLS 堆疊與作業系統設定。 請將 WinHTTP/WinINet 保留給特別需要 Win32 服務支援、瀏覽器憑證共享或深度代理整合的情況。

Important

安全提醒 — 無論你選擇哪種 HTTP 堆疊,務必在生產環境中禁用 TLS 憑證驗證。 WinHTTP 和 WinINet 都允許透過旗標忽略憑證錯誤,但這樣做會讓你的應用程式暴露在中間人攻擊之下。