转载来自:https://blog.csdn.net/thanklife/article/details/70909661
Windows HTTP服务(WinHTTP)
目的
Microsoft Windows HTTP服务(WinHTTP)为开发人员提供了HTTP客户端应用程序编程接口(API),通过HTTP协议向其他HTTP服务器发送请求。
适用范围
WinHTTP支持桌面客户端应用程序,Windows服务和基于Windows服务器的应用程序。
因为.NET Framework应用程序应该使用System.net类中的网络设施,所以不建议在Microsoft .NET Framework上构建WinHTTP。
开发人员
WinHTTP提供适用于基于Active Server Pages(ASP)的应用程序的C / C ++应用程序编程接口(API)和组件对象模型(COM)自动化组件。
对HTTP协议的基本了解对于使用任一接口很重要。
运行时要求
WinHTTP 5.1提供5.0版本的改进。有关新功能的更多信息,请参阅WinHTTP 5.1中的新功能。
WinHTTP 5.1现在是以下系统的操作系统组件:
Windows Server 2003系列
Windows XP SP1
Windows 2000 SP3(数据中心服务器除外)
重要随着WinHTTP版本5.1的发布,WinHTTP 5.0下载不可用。Microsoft已从MSDN中删除WinHTTP 5.0 SDK下载,并于2004年10月1日终止了5.0版的产品支持。
关于WinHTTP
Microsoft Windows HTTP服务(WinHTTP)为开发人员提供了HTTP / 1.1 Internet协议的服务器支持的高级接口。WinHTTP旨在主要用于与HTTP服务器进行通信的服务器应用程序在基于服务器的场景中。
WinINet是一种较旧的技术,被设计为用于交互式桌面应用程序(如Microsoft Internet Explorer,Microsoft Office和Microsoft Money)的HTTP客户端平台。WinINet会显示一些用户界面,例如收集用户凭据。然而,WinHTTP以编程方式处理这些操作。需要HTTP客户端服务的服务器应用程序应使用WinHTTP而不是WinINet。有关更多信息,请参阅将WinINet应用程序移植到WinHTTP。
WinHTTP也被设计用于系统服务和基于HTTP的客户端应用程序。WinHTTP比WinInet更安全可靠。但是,需要FTP或Gopher协议功能,cookie持久性,缓存,自动凭证对话框处理,Internet Explorer兼容性或下级平台支持的单用户应用程序应考虑使用WinInet。
该接口可以通过使用WinHTTP应用程序编程接口(API)或使用IWinHttpRequest和IWinHttpRequestEvents接口从C / C ++访问。也可以通过WinHTTP对象从脚本和Microsoft Visual Basic访问WinHTTP。有关各个功能的更多信息和说明,请参阅特定语言的WinHTTP函数参考。
应用程序(如C#或ASP.NET应用程序)应考虑托管的.NET Framework类。有关使用.NET Framework网络类的更多信息,请参阅MSDN库中的“访问Internet”主题:“.NET开发”>“.NET Framework SDK”>“.NET Framework”>“使用。 .NET框架“。
注意除了异步完成回调之外,WinHTTP不可重入。也就是说,当线程有一个等待WinHTTP功能之一的调用,如WinHttpSendRequest,WinHttoReceiveResponse,WinHttpQueryDataAvailable,WinHttpSendData或WinHttpWriteData时,它不能再次调用WinHTTP直到第一个调用完成。可能发生第二次调用的一种情况如下:如果应用程序将异步过程调用(APC)排队到调用WinHTTP的线程中,并且如果WinHTTP在内部执行警报等待,则APC将有机会运行。现在如果APC例程也可以调用WinHTTP,它重新输入WinHTTP API,WinHTTP的内部状态可能会被破坏。
WinHTTP 5.1特性
在WinHTTP 5.1版中添加了以下功能:
IPv6支持。
AutoProxy功能。
HTTP / 1.0协议,包括对keep-alive(持久)连接和会话cookie的支持。
HTTP / 1.1分组转移支持HTTP响应。
在会话之间保持活跃的匿名连接池。
安全套接字层(SSL)功能,包括客户端证书。支持的SSL协议包括以下内容:SSL 2.0,SSL 3.0和传输层安全性(TLS)1.0。
支持服务器和代理身份验证,包括对Microsoft Passport 1.4和Negotiate / Kerberos包的集成支持。
自动处理重定向,除非被禁止。
脚本化界面除了API。
跟踪设备来帮助解决问题。
WinHTTP不支持多个WinINet功能,包括URL缓存和持久性Cookie,自动转发,自动拨号,离线支持,文件传输协议(FTP)和Gopher协议。
有关版本5.1中引入的更改的更多信息,请参阅WinHTTP 5.1中的新增功能。
WinHTTP入门
有关WinHTTP的更多信息,请参阅以下主题:
WinHTTP版本描述了在不同平台上运行的两个版本的WinHTTP,版本5.0和版本5.1。
WinHTTP 5.1中的新功能介绍了最新版本的WinHTTP中的更改和新增功能。
网络术语描述了与一般的网络和特定的HTTP协议有关的有用的概念和术语。
选择一个WinHTTP接口描述了C / C ++ API和WinHTTP的COM接口。
WinHTTP安全注意事项描述使用WinHTTP时要注意的安全问题。
将WinINet应用程序移植到WinHTTP中,介绍如何修改现有的WinINet应用程序以使用WinHTTP API。
WinHTTP功能
WinHTTP提供以下功能:
WinHttpAddRequestHeaders
向HTTP请求句柄添加一个或多个HTTP请求标头。
WinHttpCheckPlatform
确定WinHTTP是否支持当前平台。
WinHttpCloseHandle
关闭单个HINTERNET句柄。
WinHttpConnect
指定HTTP请求的初始目标服务器。
WinHttpCrackUrl
将URL分为其组成部分,例如主机名和路径。
WinHttpCreateUrl
从组件部分创建URL,例如主机名和路径。
WinHttpDetectAutoProxyConfigUrl
查找代理自动配置(PAC)文件的URL。此功能报告PAC文件的URL,但不下载该文件。
WinHttpGetDefaultProxyConfiguration
从注册表中检索默认的WinHTTP代理配置。
WinHTTPGetIEProxyConfigForCurrentUser
获取当前用户的Internet Explorer(IE)代理配置。
WinHttpGetProxyForUrl
检索指定URL的代理信息。
WinHttpOpen
初始化应用程序对WinHTTP功能的使用。
WinHttpOpenRequest
创建HTTP请求句柄。
WinHttpQueryAuthSchemes
返回服务器支持的授权方案。
WinHttpQueryDataAvailable
返回使用WinHttpReadData立即可以读取的数据的字节数。
WinHttpQueryHeaders
检索与HTTP请求相关联的头信息。
WinHttpQueryOption
在指定的句柄上查询Internet选项。
WinHttpReadData
从WinHttpOpenRequest函数打开的句柄中读取数据。
WinHttpReceiveResponse
结束由WinHttpSendRequest启动的HTTP请求。
WinHttpSendRequest
将指定的请求发送到HTTP服务器。
WinHttpSetCredentials
将所需的授权凭证传递给服务器。
WinHttpSetDefaultProxyConfiguration
在注册表中设置默认的WinHTTP代理配置。
WinHttpSetOption
设置Internet选项。
WinHttpSetStatusCallback
设置WinHTTP可以在操作过程中进行调用的回调函数。
WinHttpSetTimeouts
设置涉及HTTP事务的各种超时。
WinHttpTimeFromSystemTime
根据HTTP版本1.0规范格式化日期和时间。
WinHttpTimeToSystemTime
获取HTTP时间/日期字符串并将其转换为SYSTEMTIME结构。
WinHttpWriteData
将请求数据写入HTTP服务器。