(Excel VBA):访问JSON文件 - 操作计时



我正在尝试从Web上的JSON文件中获取数据。我暂时使用虚拟JSON文件是为了使事情正常工作。我的代码在下面,但每次都不会返回任何内容。如果我也使用不同的URL,也会发生同样的情况。

Sub Test()
    Dim strResult As String
    Dim objHTTP As Object
    Dim URL As String
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    URL = "https://jsonplaceholder.typicode.com/posts/2"
    objHTTP.Open "GET", URL, False
    objHTTP.Send
    strResult = objHTTP.ResponseText
    MsgBox strResult
End Sub

如果它相关,我在文件中启用了以下库:

  • 应用程序的视觉基本

  • Microsoft Excel 15.0对象库

  • ole自动化

  • Microsoft脚本运行时

  • Microsoft Winhttp服务,版本5.1

我缺少什么?

编辑:修复。我不知道winhttprequest和xmlhttprequest之间的区别。使用后者时,代码工作正常。谢谢大家。

是否有特殊原因为什么使用winhttprequest代替xmlhttprequest?

在使用WinHttpRequest时,HTTP请求的操作系统默认值 - 例如,代理设置 - 未使用,必须明确设置:

Sub Test()
    Dim strResult As String
    Dim objHTTP As Object
    Dim URL As String
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    objHTTP.SetProxy 2, "proxyIP:proxyPort"
    URL = "https://jsonplaceholder.typicode.com/posts/2"
    objHTTP.Open "GET", URL, False
    objHTTP.setCredentials "username", "password", 1
    objHTTP.Send
    strResult = objHTTP.ResponseText
    MsgBox strResult
End Sub

iwinhttprequest中的2 :: SetProxy方法是HTTPREQUEST_PROXYSETTING_PROXY。Iwinhttprequest中的1 :: SetCredentials方法是HTTPREQUEST_SETCREDENTIALS_FOR_PROXY

使用XMLHTTPRequest时,HTTP请求的操作系统默认值用作控制面板中Internet Options中的设置。因此,如果您能够通过浏览器访问URL,则应运行以下内容:

Sub Test()
    Dim strResult As String
    Dim objHTTP As Object
    Dim URL As String
    Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
    URL = "https://jsonplaceholder.typicode.com/posts/2"
    objHTTP.Open "GET", URL, False
    objHTTP.Send
    strResult = objHTTP.ResponseText
    MsgBox strResult
End Sub

您的代码在此处运行不错,但是如果事情发生了,也许您应该.WaitForResponse

Sub Test()
    Dim strResult As String
    Dim objHTTP As Object
    Dim URL As String
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    URL = "https://jsonplaceholder.typicode.com/posts/2"
    objHTTP.Open "GET", URL, False
    objHTTP.Send
    objHTTP.waitforresponse
    strResult = objHTTP.ResponseText
    MsgBox strResult
End Sub

相关内容

  • 没有找到相关文章

最新更新