启用网络函数

来源:互联网 发布:云计算架构师认证 编辑:程序博客网 时间:2024/05/19 01:33

在使用WinINet函数之前,程序应该尝试通过使用InternetAttemptConnect函数建立网络连接。这个函数调

用拨号上网对话框去创建一个网络连接或者检查一个网络连接是否存在。如果这个函数失败,程序可以在

离线模式中操作在之前的网络连接中已经保存的信息。
使用InternetCheckConnection函数检查网络连接。它尝试去PING传递给它的URL所指定的服务器。如果

FLAG_ICC_FORCE_CONNECTION 标志已置及URL为空,它会检查服务器数据库入口最近的服务器。如果有一个

存在,它会PING那个服务器。
下一步,使用InternetOpen函数建立客户端正在使用的网络连接参数表。InternetOpen 建立的根

HINTERNET 句柄用于建立HTTP及FTP通信。InternetOpen无法通过测试网络连接来校验传递的参数是正确的

。使用InternetConnect 函数创建一个具体的会话。 InternetConnect 用传递给它的参数为指定的站点初

始化一个会话和创建一个HINTERNET 根句柄的子句柄。InternetConnect 无法尝试操作或者建立一个到具

体站点的连接,除非是FTP会话。FtpFindFirstFile, FtpOpenFileHttpOpenRequest 函数使用

InternetConnect 所创建的句柄去建立一个到具体站点的连接。

使用InternetOpen
必须InternetOpen创建了根HINTERNET 句柄才能使用网络连接。关于用户代理(程序调用网络功能),访

问网络的方式,代理名,主机及绕过代理的地址,和行为被传递给InternetOpen

设置用户代理
正在调用的程序应该给予InternetOpen的参数lpszAgent一个包含程序名或者访问网络的实体的字符串。

设置访问方式
InternetOpen
支持3种访问方式:
1、如果系统使用直接连接网络,就使用 INTERNET_OPEN_TYPE_DIRECT。参数lpszProxyName

lpszProxyBypass 不被使用且应该被置为空。
2、如果系统使用代理访问网络,就使用 INTERNET_OPEN_TYPE_PROXYInternetOpen使用由参数

lpszProxyName指定的代理服务器和lpszProxyBypass指定的方式绕过代理访问任务
3、使用INTERNET_OPEN_TYPE_PRECONFIG 通知你的程序从注册表检索配置。这是包含WEB浏览器的程序最多

的最好的典型的选择。

INTERNET_OPEN_TYPE_PRECONFIG 查看ProxyEnable, ProxyServerProxyOverride的值。这些值位

于"HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings"。

如果ProxyEnable为零,程序使用INTERNET_OPEN_TYPE_DIRECT。反之,使用INTERNET_OPEN_TYPE_PROXY

使用ProxyServer及ProxyOverride的信息。

WinINet 函数只有在IE被安装的前提下为SOCKS提供支持。IE的安装程序包含用于支持SOCKS代理的

Wsock32n.dll文件。Wsock32n.dll是不可重新分配的。

代理服务器列表
WinINet
认可两种代理方式:CERN代理方式(只有HTTP)和TIS FTP代理(只有FTP),如果IE已经安装,

WinINet 同样支持SOCKS代理方式。InternetConnect 假定默认,则指定代理是一个CERN代理。如果访问方

式是INTERNET_OPEN_TYPE_DIRECT或者INTERNET_OPEN_TYPE_PRECONFIG,则InternetOpen 的参数

lpszProxyName 应该为空。反之,传递给参数lpszProxyName 的值必须包含代理。代理列表可以包含用于

访问代理的端口。
必须使用格式"<protocol><protocol>://<proxy_name>"的字符串为一个具体的协议列出代理列表。有效的

协议是HTTP,HTTPS和FTP。比如,列出FTP代理,一个有效的字符串应该

是"ftp=ftp://ftp_proxy_name:21"。如果代理使用默认的端口则端口可以省略。如果一个代理名被它自己

列出,则将它当作默认用于任何协议。比如,"http=http://http_proxy other"会使用http_proxy操作任

何HTTP,同时其他协议交会使用其他的。

假设函数由参数lpszProxyName 指定的代理是一个CERN代理。一个程序可以指定超过1个代理,包括用于不

同协议的不同代理。比如,如果你指定"ftp=ftp://ftp-gw HTTP=http://jericho:99 proxy", FTP请求通

过监听21端口的ftp-gw代理返回,而HTTP请求则通过监听端口99的名为jericho的CERN代理返回。反之,

HTTP请求将会通过监听端口80的名为proxy的CERN代理。注意,如果程序只使用FTP,比如,它不需要指

定"ftp=ftp://ftp-gw:21",它可以只指定"ftp-gw"。一个程序只有在使用超过一个协议的时候才必须指定

具体的协议名

绕过代理列表
那些不会被发送到代理的主机名或者IP地址应该被加到绕过代理列表。这个列表可以包含通配符"*",对于

多个地址和主机名,用";"分隔。如果"<local>" 的宏被指定,函数绕过代理访问不包含句号的任何主机名

主机名为 "localhost","loopback","127.0.0.1",或者"[::1]"的请求WinINet 会绕过代理。这个行为

存在因为一个远程代理无法正确地分析这些地址。

使用InternetConnect

InternetConnect函数必须通过 InternetOpen 函数返回的根句柄创建一个句柄来开始一个会话。

InternetConnect设置了服务器地址,端口,用户名,密码和服务类型。

如果InternetOpen 在调用过程中使用了 INTERNET_FLAG_ASYNC标志,则调用InternetConnect时应该包含

一个非零的值。

服务器名可以包含主机名(如"www.servername.com")或者IP地址(如"10.0.1.45")。

服务器端口是使用TCP/IP协议端口连接到服务器的。如果服务方式为INTERNET_INVALID_PORT_NUMBER ,则

InternetConnect使用默认端口。

ValueMeaningINTERNET_DEFAULT_FTP_PORTUse the default port for ftp servers (port 21).INTERNET_DEFAULT_GOPHER_PORTUse the default port for gopher servers (port 70).

Note  Windows XP and Windows Server 2003 R2 and earlier only.

INTERNET_DEFAULT_HTTP_PORTUse the default port for http servers (port 80).INTERNET_DEFAULT_HTTPS_PORTUse the default port for https servers (port 443).INTERNET_DEFAULT_SOCKS_PORT

Use the default port for SOCKS firewall servers (port 1080).

 

 

原创粉丝点击