我正在尝试从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