WinINet的代理策略
2024-03-17 17:33:41

什么是系统代理

我们在网上冲浪时,无时无刻都在使用着基于HTTP协议的应用程序,使用最多的就是浏览器了。
面向开发者而言,微软提供了 WinINetWinHTTP 两套网络API。WinINetWinHTTP 的超集。
我们在桌面上使用的应用程序几乎都是用的 WinINet,而 WinHTTP 通常用于一些无GUI的服务程序中。
关于 WinINetWinHTTP 的差别可以查看官方手册 WinINet vs. WinHTTP
本文所讨论的是 WinINet 的代理机制。

WinINet的代理策略

API函数 InternetOpenW 决定了程序如何使用代理,重点在第2个参数AccessType,解释如下:
INTERNET_OPEN_TYPE_DIRECT:直连,不走代理。
INTERNET_OPEN_TYPE_PRECONFIG:从注册表获取代理设置并使用。
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY:从注册表获取代理设置并使用,但不使用”自动配置”代理设置。
INTERNET_OPEN_TYPE_PROXY:绕过注册表的代理设置,直连代理服务器,代理服务器由第3个参数指定。
第1个和第4个参数很好理解,说下第2个和第3个参数,WinINet的代理机制分两种,一种是自动配置,另一种是代理服务器

自动配置基于 PAC 技术来实现代理。而代理服务器则是比较传统的方式,通过指定地址和协议来代理的,虽然也可以指定黑名单IP禁止代理,但灵活性是不如 PAC 代理技术的。
当程序使用INTERNET_OPEN_TYPE_PRECONFIG作为参数时,表示优先使用”自动配置”代理,否则使用”代理服务器”的设置
而当程序使用INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY作为参数时,表示跳过”自动配置”代理,直接使用”代理服务器”的设置
最常见的浏览器和绝大多数应用通常是使用INTERNET_OPEN_TYPE_PRECONFIG作为参数,用INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY的情况比较少见。