InternetOpen

本文是从MSDN上摘录的文章的译文,纯属个人翻译,如有不恰当之处,请查阅MSDN相关文档。

为了使网络连接生效,必须用函数InternetOpen函数创建一个HINTERNET根句柄。InternetOpen函数接收的参数为:用户代理信息(访问Internet函数的应用),访问网络的类型,代理主机和地址以及代理的行为动作。

用户代理设置

InternetOpen函数的第一个参数为lpszAgen,是一个以'\0'结尾的字符串,表示访问英特网的代理服务器名。例如,微软的Internet浏览器使用的代理名称为“Microsoft Internet Explorer”。

访问类型设置

有三种访问类型:

  • INTERNET_OPEN_TYPE_DIRECT:直接连接Internet,不使用任何代理。lpszProxyNamelpszProxyBypass参数都设置为NULL
  • INTERNET_OPEN_TYPE_PROXY:系统使用了一个或者多个代理时,就使用这个类型。InternetOpen函数使用lpszProxyName指定的代理服务器,且忽略lpszeProxyBypass指定的代理。
  • INTERNET_OPEN_TYPE_RECONFIG:应用程序到注册表中搜索代理设置。一般而言,这个选项是最好的选择,因为绝大多数的应用包括web浏览器都使用它。
到系统注册表中搜索ProxyEnable, ProxyServer以及ProxyOverride的值。这些注册表项的位置 是:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

如果ProxyEnable是零,应用自动使用INTERNET_OPEN_TYPE_DIRECT。否则,应用使用INTERNET_OPEN_TYPE_PROXY以及注册表项ProxyServer和ProxyOverride。

如果系统安装了Internet浏览器,那么WinINet函数还支持SOCKS。因为Internet浏览器安装时加入了Wsock32n.dll,这个在使用SOCK代理时会使用到。Wsock32n.dll不会再发布更新了。

列举代理服务器

WinINet识别两种类型的代理:CERN代理(HTTP代理)和TIS FTP代理(FTP代理)。如果安装了Internet浏览器,则WinINet也支持SOCKS类型的代理。InternetConnect默认使用CERN代理。如果访问类型是INTERNET_OPEN_TYPE_DIRECT或者INTERNET_OPEN_TYPE_PRECONFIG,函数InternetOpen的参数lpszeProxyName必须设置为NULL。否则,参数lpszProxyName必须包含一个或者多个代理的列举,多个列举项用空格隔开。代理列举项可以包含端口号,访问代理时使用。

列举代理需要遵循的格式为:<protocol>=<protocol>://<proxy_name>"。有效的协议有:HTTP,HTTPS和FTP。例如,对于一个FTP代理,一种有效的描述为:ftp=ftp://ftp_proxy_name:21,其中ftp_proxy_name是FTP代理的名称,21是访问代理时必须使用的端口号。如果代理使用对应协议默认的端口号,则端口号可以省略(例如:HTTP默认的端口号为80)。如果在代理列表中指定了代理名,该代理将作为任何没有指明代理的网络层协议的默认代理。例如,http=http://http_proxy other将使用http_proxy作为任何HTTP操作的代理,然而所有其他的协议使用other作为代理(因为在lpszProxyName每个代理描述都是空格隔开的,这句表示有两个列举项,一个是http=http://http_proxy,一个是other,只有代理名)。

默认情况下,函数假定lpszProxyName是一个CERN代理。应用可以指定多个不同协议的不同代理。例如:

ftp=ftp://ftp-gw HTTP=http://jericho:99 proxy

FTP请求通过ftp-gw代理发出,端口号为21,HTTP请求通过CERN代理jericho发出,端口号为99。否则,HTTP请求通过CERN代理发出,端口号为80。注意,如果应用仅仅用到FTP,就不需要添加代理列举项:ftp=ftp://ftp-gw:21,因为这么写就要求FTP协议只使用ftp-gw代理。InternetOpen创建的句柄对应多个协议时,需要指定具体的协议名。

列举绕过的代理

不希望发送到代理服务器的主机名或者IP地址可以添加到绕过的代理列表中。列举时,可以使用通配符*,使应用程序绕过匹配该模式的IP地址。有多个地址和主机名时,用分号隔开。如果指定了<local>宏,则InternetOpen函数会绕过任意不包含日期的代理列举项。

默认情况下,WinINet会自动忽略使用localhost, loopback, 127.0.0.1或者[::1]的代理请求,因为远端的代理服务器无法正确解析它们的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值