【发布时间】:2020-05-29 18:12:48
【问题描述】:
更新:已解决 --> 请看下面的答案。
更新: 在 Microsoft 文档中,我可以看到,当使用 Async=false 调用 open 方法时,如果“协议堆栈超时”,响应可能不会返回,但是我无法读取超时计时器。 https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms931177%28v%3dmsdn.10%29 不确定是否相关。
我正在尝试通过 VersionOne 查询 API 检索 JSON 响应对象。 当我尝试在 VBA 中读取 responseText 时,我收到一个空数组,但是完全相同的请求会从 PostMan 返回正确的数据。我收到 HTTP 200 代码响应,但响应正文中没有数据。
在 VBA 和 Excel 中执行此操作的原因是需要在预先存在的 Excel 模型中分析数据。 我尝试了不同的身份验证可能性,包括 OAUTH 和 Basic。
这是 VBA 代码
Option Explicit
Sub Test_LateBinding()
Dim objRequest As Object
Dim strUrl As String
Dim strResponse As String
Dim body As String
Dim strResponseHeaders As String
Dim allResponseHeader As String
Set objRequest = CreateObject("MSXML2.XMLHTTP")
strUrl = "https://endpoint"
body = " { ""from"": ""Epic"",""select"": []}"
'with basic'
With objRequest
.Open "GET", strUrl, False, "XXXX", "XXXX"
.SetRequestHeader "Content-Type", "application/json"
.Send body
strResponseHeaders = .StatusText
strResponse = .ResponseText
allResponseHeader = .GetAllResponseHeaders
End With
Debug.Print body
Debug.Print allResponseHeader
Debug.Print strResponse
End Sub
这是我的控制台输出:
OK
Content-Type: application/json; charset=utf-8
Content-Length: 2
X-Content-Type-Options: nosniff
V1-MemberID: skatteministeriet/120267
Strict-Transport-Security: max-age=31536000; includeSubdomains
X-Robots-Tag: noindex
VersionOne: Ultimate/19.0.3.29; 0
X-Instart-Request-ID: 3912039762705832388:SEN01-NPPRY25:1553377406:0
[]
这是 PostMan 响应标头: PostMan response headers
这是 URL 和请求 JSON 正文: URL and request body
【问题讨论】:
-
不,它应该是一个获取请求。 :)
-
您能否指出指南中的哪个示例与您的用例相符?到目前为止我发现的最接近的是这里的 POST 请求:community.versionone.com/VersionOne_Connect/Developer_Library/…
-
端点介绍 community.versionone.com/VersionOne_Connect/Developer_Library/… 端点游览 community.versionone.com/VersionOne_Connect/Developer_Library/… Tbh 文档组织得非常糟糕,它的结构如此奇怪......
-
您能提供一个有效的网址吗?此外,将带有所有标题和参数的 OK PostMan 请求的屏幕截图添加到问题(或链接)。
-
端点的有效 URL 发布起来会很麻烦,因为端点是独立于组织的,因此是“不可公开的”。但是,PostMan 请求的屏幕截图是可能的。我会用它更新这篇文章。
标签: excel vba api web-scraping xmlhttprequest