什么是WinHTTP?
来源:互联网 发布:淘宝网2017年销售额 编辑:程序博客网 时间:2024/05/16 23:50
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));
proxycfg -p "http=http_proxy https=https_proxy" "<local>;*.microsoft.com"上面的命令指定使用名为http_proxy的代理服务器访问http主机, 使用名为https_proxy的代理服务器访问https主机.该命令还指定了访问local intranet的站点还有任何匹配"*.microsoft.com"的站点的时候, 不使用代理.
WinHTTP和System.Net中的类在配置代理时的区别
===============
上面讲到过, 如果应用程序是基于.net framework的, 那么并不推荐使用WinHTTP来作为http客户端, 推荐使用的是System.Net中的类型. WinHTTP可以用上面的代码或proxycfg来配置, System.Net下的类型靠啥来配置呢?
答案是靠config文件. .Net Framework使用标准的XML文件作为配置文件, 存放配置信息. 可执行文件有.config文件, asp.net站点有web.config文件.
config文件中的<system.Net>元素中包含有指定.net framework如何连接网络的配置信息. 其中的<defaultProxy>元素包含的就是HTTP代理服务器的配置. 这个元素有三个子元素:
- bypasslist- 提供了一个正则表达式的集合, 用于描述不适用代理的站点.
- module- 为应用程序添加一个新的proxy module
- proxy- 指定proxy服务器
举例
<configuration> <system.net> <defaultProxy> <bypasslist> <add address="[a-z]+\.contoso\.com$" /> <add address="192\.168\.\d{1,3}\.\d{1,3}" /> </bypasslist> </defaultProxy> </system.net></configuration>
参考资料:
Windows HTTP Services
http://msdn.microsoft.com/en-us/library/aa384273%28v=VS.85%29.aspx
ProxyCFG on Win2003 和 NetSH on Win2008
http://www.cnblogs.com/awpatp/archive/2010/05/13/1734762.html
Using the WinHTTP Proxy Configuration Utility
http://msdn.microsoft.com/en-us/library/ms761351%28VS.85%29.aspx
ProxyCfg.exe, a Proxy Configuration Tool
http://msdn.microsoft.com/en-us/library/aa384069%28v=VS.85%29.aspx
<bypasslist> Element (Network Settings)
http://msdn.microsoft.com/en-us/library/31465c77.aspx
- 什么是WinHTTP?
- winHttp
- winhttp
- WINHTTP
- 异步WinHTTP
- 异步 WinHTTP
- 异步WinHTTP
- WinHTTP教程
- winhttp使用
- winhttp put
- WinHttp用法(WinHttp.WinHttpRequest.5.1方法,属性)
- WinHttp.WinHttpRequest.5.1
- Cookie Handling in WinHTTP
- WinHttp应用demo
- winhttp.dll 常量表
- winhttp ssl WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA
- WinINet 与 WinHTTP简介
- [VC++] 异步 WinHTTP
- android动画原理分析
- 正则表达式,特殊字符
- (转)【Android游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)
- jquery 如何监听div内容的变化
- javascript--关键字 apply bind call this
- 什么是WinHTTP?
- BlockingQueue
- 7个悖论的理解
- IOS异步图片加载SDWebImage的使用时遇到file not found和Symbol Not Found: _objc_storeStrong
- flex4皮肤效果
- (转)【Android游戏开发二十五】在Android上的使用《贝赛尔曲线》!
- Objective-C关于@property一些东西
- Ubuntu系统的备份与还原
- 10大移动API设计技巧