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

时间:2018-03-26 12:04:28

标签: html json excel vba timeout

我试图从网络上的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

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

  • Visual Basic for Applications

  • Microsoft Excel 15.0对象库

  • OLE自动化

  • Microsoft Scripting Runtime

  • Microsoft WinHTTP Services,版本5.1

我错过了什么?

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

2 个答案:

答案 0 :(得分:0)

使用WinHttpRequest代替XMLHTTPRequest是否有特殊原因?

使用convert -loop 0 -delay 20 a-*.gif result.gif class CreateRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } public function rules() { return [ 'product_id' => ['integer', function($attribute, $value, $fail) { $product = Product::find($value); if ($value != 0 && !$product ) { return $fail($attribute.' is invalid.'); } }, ]; } } 请求的操作系统默认设置 - 例如代理设置 - 使用时必须明确设置:

WinHttpRequest

IWinHttpRequest::SetProxy method中的HTTPSub 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::SetCredentials method中的2HTTPREQUEST_PROXYSETTING_PROXY

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

HTTP

答案 1 :(得分:0)

你的代码在这里工作正常,但如果事情超时,你或许应该.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