在 VBA 中使用 xmlHttp 建立 API 会话

Posted

技术标签:

【中文标题】在 VBA 中使用 xmlHttp 建立 API 会话【英文标题】:Establishing an API session with xmlHttp in VBA 【发布时间】:2015-10-04 17:33:57 【问题描述】:

如果我的问题标题不正确,我深表歉意 - 我已经习惯了使用 API 进行 php 会话的想法。

我正在尝试使用以下代码在 VBA 中完成同样的壮举:

'Login
strLogin = "https://URL.COM/authenticateUser?login=username&apiKey=password"
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
xmlHttp.Open "GET", strLogin
xmlHttp.setRequestHeader "Content-Type", "text/xml"
xmlHttp.send

'Save the response to a string
strReturn = xmlHttp.responseText


'Open URL and get JSON data

strUrl = "https://URL.COM/Search/search?searchTerm=" & Keyword & "&mode=beginwith"
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
xmlHttp.Open "GET", strUrl
xmlHttp.setRequestHeader "Content-Type", "text/xml"
xmlHttp.send

'Save the response to a string
strReturn = xmlHttp.responseText


Sheets(1).Cells(20, 2).Value = strReturn

使用此 API,我需要先登录,然后再执行任何将返回数据的调用。

我的问题是我无法确定如何“保持登录状态”以便我的第二次通话正常工作。

在我登录后,strReturn 会填充以下字符串:

"Status":"Code":"2","Message":"Authentication Succeeded","Success":"true"

但是,当我使用 strUrl 时,我收到以下消息:

"Status":"Code":"1","Message":"Invalid User Name Or Password","Success":"false"

我在之前的项目中使用过此代码,在这些项目中,我需要为对服务器的每个请求提供 API 密钥以及 URL - 所以这显然工作正常。我不确定如何使用 xmlHttp 来实现“建立会话”的概念。

【问题讨论】:

只是一个观察,但是您在执行第二个 GET 之前创建了一个新的 'xmlHttp' 对象。也许您可以重用现有的 'xmlHttp' 对象,看看这是否有助于保持会话活跃? 【参考方案1】:

因此,对于遇到此问题的任何其他人,简单的解决方案是从 second 调用中删除以下行:

Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")

通过不创建新对象,vba 能够保留和使用来自第一次登录调用的 cookie。

最终代码如下所示:

'Login
strLogin = "https://URL.COM/authenticateUser?login=username&apiKey=password"
Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
xmlHttp.Open "GET", strLogin
xmlHttp.setRequestHeader "Content-Type", "text/xml"
xmlHttp.send

'Save the response to a string
strReturn = xmlHttp.responseText


'Open URL and get JSON data

strUrl = "https://URL.COM/Search/search?searchTerm=" & Keyword & "&mode=beginwith"
xmlHttp.Open "GET", strUrl
xmlHttp.setRequestHeader "Content-Type", "text/xml"
xmlHttp.send

'Save the response to a string
strReturn = xmlHttp.responseText


Sheets(1).Cells(20, 2).Value = strReturn

并且需要登录的 API 能够保持会话建立。

【讨论】:

以上是关于在 VBA 中使用 xmlHttp 建立 API 会话的主要内容,如果未能解决你的问题,请参考以下文章

使用 vba 和 xmlhttp 自动提交网站上的帖子表单

Excel VBA中的XmlHttp Post不更新网站表单

VBA如何缓存xmlhttp请求返回值?

如何使用 vba 将参数传递给 asp.net web api?

在 Excel VBA 代码中处理 XMLHttp 响应中的 JSON 对象

VBA XMLHTTP 清除身份验证?