Vba XMLHTTP和ServerXMLHTTP之间的区别

Vba XMLHTTP和ServerXMLHTTP之间的区别,vba,excel,xmlhttprequest,Vba,Excel,Xmlhttprequest,我正在尝试编写一个Excel外接程序,它可以将数据从web服务获取到Excel中 要使用它,用户只需键入外接程序提供的函数名。我在VBA中找到了两篇实现HTTP请求的文章:和 我使用它们有困难。我不知道该用哪一个。XMLHTTP和ServerXMLHTTP之间有什么区别 蒂姆和杰伊都提供了极好的上下文和简洁的评论。我将简单地添加一点,并尝试给出一些上下文 实际上,XMLHTTP对象用于创建XMLHttpRequest,用于从网站/webserver/web服务请求数据。有关更多详细信息,请参阅w

我正在尝试编写一个Excel外接程序,它可以将数据从web服务获取到Excel中

要使用它,用户只需键入外接程序提供的函数名。我在VBA中找到了两篇实现HTTP请求的文章:和

我使用它们有困难。我不知道该用哪一个。XMLHTTP和ServerXMLHTTP之间有什么区别

蒂姆和杰伊都提供了极好的上下文和简洁的评论。我将简单地添加一点,并尝试给出一些上下文

实际上,XMLHTTP对象用于创建XMLHttpRequest,用于从网站/webserver/web服务请求数据。有关更多详细信息,请参阅wikipedia链接:

通常,XMLHTTP在作为客户机与服务器通信时使用,例如当您使用应用程序向Web服务发出请求时。XMLHTTP对象还用于各种以客户机为中心的传输方法,如文件传输协议(FTP)、url缓存和其他有用的工具。简而言之,XMLHTTP对象用于向某种类型的服务器发出请求,并请求客户机感兴趣的内容,无论是通过FTP连接访问服务器、存储库中的一系列文件,还是用于处理客户机数据的Web服务

相比之下,ServerXMLHTTP用于服务器之间、应用程序(客户端)之间的通信以及处理来自客户端的请求。虽然ServerXMLHTTP对象将状态保持为活动状态(这意味着向目标发送/从目标发送/接收的信息将保留以供当前连接中的未来数据事务使用),但它也不主动支持某些XMLHTTP功能,例如ServerXMLHTTP对象使用的HTTP客户端堆栈的“URL缓存、代理服务器的自动发现、HTTP/1.1分块、脱机支持以及对Gopher和FTP协议的支持”

从技术角度来看,XMLHTTP对象使用WinInet(Windows Internet Explorer)实现其功能,而ServerXMLHTTP对象使用客户端堆栈。WinInet dll是Windows Internet协议管理的主干,dll用于处理HTTP、HTTPS、FTP和类似请求

相反,当ServerXMLHTTP对象创建新的客户端http堆栈时(本质上是http客户端的单独“会话”。使用单独会话意味着ServerXMLHTTP对象的多个实例可能在任何给定时间处于活动状态,这取决于内存和套接字连接的可用性

因此,简言之,除了上述注释中的信息外,XMLHTTP对象通常用于请求信息并以某种方式使用,通常作为客户机使用。同样有用但通常使用方式不同的是,ServerXMLHTTP对象可用于请求数据、发送数据,甚至将接收到的数据传递给另一个应用程序这通常用于需要实时响应的业务应用程序,或者用于向给定一系列请求的客户机提供数据,这些请求中可能内置了条件,等等

希望这能揭示两者之间的差异。阅读SO有关使用特定XMLHTTP类型请求的问题/答案,以及深入研究MSDN和其他为VB、VBA和Microsoft Office提供internet/XMLHTTPRequest特定材料文档的网站时,可以发现更多内容

让我知道这是否有帮助,或者如果您有其他问题/想法


~JOL

我刚刚遇到了一个不同点:当Web服务器(IIS)启动时配置为仅允许Windows身份验证而不允许匿名访问,ServerXMLHTTP调用失败并出现身份验证错误,而XMLHTTP调用则不允许。似乎XMLHTTP对象会在需要时自动处理发送Windows身份验证凭据的问题。我怀疑将NetworkCredentials添加到ServerXMLHTTP对象t应该是最好的解决方案,但我只能找到显式传递明文uid/pwd的基本身份验证(显然不可接受)。

ServerXMLHTTP对象使用winhttp,而XMLHTTP使用wininet

当wininet解析身份验证和代理配置等问题时,这些问题不会像使用ServerXMLHTTP时那样出现。但是,XMLHTTP中有限的灵活性可能会迫使您承担使用ServerXMLHTTP的额外责任,因为您必须协商服务器和目标端点身份验证机制,尽管winhttp中有一些方法可以帮助实现这一点

当将更基于客户端的XMLHTTP移植到更具可配置性的健壮ServerXMLHTTP对象和类时,您可能想知道为什么很久以前没有这样做


甚至不要让我开始使用这两个版本中命运多舛、现已失效的WPAD支持。:)

真正帮助我的是它

定义对象后:

Dim objHTTP As Object

Set objHTTP = createObject("MSXML2.ServerXMLHTTP")
...
然后包括这两行:

' --- Disregard any Proxy Settings and go straight to the IP address

    objHTTP.SetProxy 1

一般来说,ServerXMLHTTP在与HTTPS(安全HTTP)通信时提供更好的控制。在具有最新MSXML更新的Windows XP SP3中,XMLHTTP将无法使用POST方法通过HTTPS发送数据。我不知道Windows Vista、Windows 7或Windows 8中的此问题。请参阅: