什么是WinHTTP?
WinHTTP的全称是Microsoft Windows HTTP Services, 它提供给开发者⼀个HTTP客户端应⽤程序接⼝(API), 通过这种API借助HTTP协议给其他的HTTP服务器发送请求.
WinHTTP⽀持桌⾯应⽤程序, Windows系统服务, 和Windows服务器端应⽤程序.
对于基于Microsoft .NET Framework的应⽤程序, 不推荐使⽤WinHTTP服务, 因为.NET Framework应⽤程序应该使⽤在System.Net命名空间下的⽹络基础设施类型.
WinHTTP提供了两种编程⽅式, ⼀种是C\C++的API, 另⼀种是COM组件.
WinHTTP与WinINet的区别
================
WinHTTP被设计为主要应⽤在服务器端应⽤程序的场景下, 让服务器端应⽤程序访问HTTP服务器.
WinINet是⼀种更⽼的技术, 它被设计为⼀个HTTP客户端平台, ⽤于交互式桌⾯应⽤程序, ⽐如说IE, Office等.
服务器端应⽤程序要求HTTP客户端服务使⽤WinHTTP⽽不是WinINet.
WinHTTP和WinINet在微软是由不同的团队来提供⽀持的.
WinHTTP与Proxy
================
如果HTTP Proxy需要认证(authentication), 那么HTTP Application会收到407(proxy requires authentication). 除了这个状态码, 代理服务器还会发送⼀个或更多的authenticate headers: "Proxy-Authenticate". 这些信息⾜够我们在network monitor trace中鉴定HTTP⽆法访问是否是由于proxy需要认证引起的了.
WinHTTP的proxy配置是存储在注册表键
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\WinHttpSettings
当中的, 修改和查看需要使⽤⼀个命令⾏⼯具proxycfg.
实际上, 通过代理来使⽤WinHTTP访问HTTP和HTTPS的主机有两种⽅式.
在应⽤程序中指定代理配置. 举例如下:
hSession = WinHttpOpen( L"WinHTTP Example/1.0",
WINHTTP_ACCESS_TYPE_NAMED_PROXY,
L"proxy_name",
L"<local>",
0);
或者
WINHTTP_PROXY_INFO proxyInfo;
proxyInfo.dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
proxyInfo.lpszProxy = L"proxy_name";
proxyInfo.lpszProxyBypass = L"<local>";
/
/ Set the proxy information for this session.
WinHttpSetOption( hSession,
WINHTTP_OPTION_PROXY,
&proxyInfo,
sizeof(proxyInfo));
在应⽤程序外配置默认的代理配置, 这⾥需要使⽤位于%windir%\system32⽬录下的命令⾏⼯具
proxycfg -p "http=http_proxy https=https_proxy" "<local>;*.microsoft"
上⾯的命令指定使⽤名为http_proxy的代理服务器访问http主机, 使⽤名为https_proxy的代理服务器访问https主机.
setoption该命令还指定了访问local intranet的站点还有任何匹配"*.microsoft"的站点的时候, 不使⽤代理.
WinHTTP和System.Net中的类在配置代理时的区别
===============
上⾯讲到过, 如果应⽤程序是基于 framework的, 那么并不推荐使⽤WinHTTP来作为http客户端, 推荐使⽤的是System.Net中的类型. WinHTTP可以⽤上⾯的代码或proxycfg来配置, System.Net下的类型靠啥来配置呢?
答案是靠config⽂件. .Net Framework使⽤标准的XML⽂件作为配置⽂件, 存放配置信息. 可执⾏⽂件有.config⽂件, asp站点有fig ⽂件.
config⽂件中的<system.Net>元素中包含有指定 framework如何连接⽹络的配置信息. 其中的<defaultProxy>元素包含的就是HTTP代理服务器的配置. 这个元素有三个⼦元素:
1. bypasslist- 提供了⼀个正则表达式的集合, ⽤于描述不适⽤代理的站点.
2. module- 为应⽤程序添加⼀个新的proxy module
3. proxy- 指定proxy服务器
举例
<configuration>
<system>
<defaultProxy>
<bypasslist>
<add address="[a-z]+\.contoso\$" />
<add address="192\.168\.\d{1,3}\.\d{1,3}" /> </bypasslist>
</defaultProxy>
</system>
</configuration>
参考资料:
Windows HTTP Services
ProxyCFG on Win2003 和 NetSH on Win2008 Using the WinHTTP Proxy Configuration , a Proxy Configuration Tool
<bypasslist> Element (Network Settings)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论