在 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 会话的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA中的XmlHttp Post不更新网站表单
如何使用 vba 将参数传递给 asp.net web api?