Javascript 使用VBA和JSON响应的XHR请求

Javascript 使用VBA和JSON响应的XHR请求,javascript,json,vba,excel,Javascript,Json,Vba,Excel,我正在尝试从一个电子商务时尚网站获取一些数据。当我在网站上打开一个分类时,我可以看到48个项目,最后还有一个“加载更多”按钮。当我点击这个按钮时,我看到接下来的48个项目。反手拍中的情况是,当我单击“加载更多”按钮时,会发送一个XHR post请求,并以JSON格式返回响应。我希望自动执行此搜索并在excel工作表中捕获响应数据。我是编程新手,不熟悉高级脚本语言,所以我在VBA上工作。我的请求已提交,但未得到响应。我的分类页面是,发送请求的链接是。 这是我的密码: Sub post()

我正在尝试从一个电子商务时尚网站获取一些数据。当我在网站上打开一个分类时,我可以看到48个项目,最后还有一个“加载更多”按钮。当我点击这个按钮时,我看到接下来的48个项目。反手拍中的情况是,当我单击“加载更多”按钮时,会发送一个XHR post请求,并以JSON格式返回响应。我希望自动执行此搜索并在excel工作表中捕获响应数据。我是编程新手,不熟悉高级脚本语言,所以我在VBA上工作。我的请求已提交,但未得到响应。我的分类页面是,发送请求的链接是。 这是我的密码:

    Sub post()
    Dim objHTTP As Object
    Dim result As String
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.navigate "about:blank"
    objIE.Visible = True
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URL = "http://www.myntra.com/searchws/search/styleids2"
    objHTTP.Open "POST", URL, False
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
   objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
   objHTTP.send ("query=(full_text_myntra:(_)AND(statusid:1008))&start=0&rows=500&facet=true&facetField=[]")
   result = objHTTP.responsetext
   objIE.document.Write result

   Set objHTTP = Nothing
  End Sub     

在尝试使用运行查询时,我遇到了不少415个错误,API似乎希望使用JSON而不是form urlencoded,并且需要将参数包装在数组中,因此我将在您的代码中检查:

"[{""query"":""(full_text_myntra:(_)AND(statusid:1008))"",""start"":0,""rows"":500,""facet"":true,""facetField"":[]}]"
此外,我建议使用类似(我为遇到的类似这样的情况制作)的方法来帮助创建请求和处理JSON:

Dim MyntraClient As New RestClient
MyntraClient.BaseUrl = "http://www.myntra.com/"

' With inline JSON
Dim json As String
json = "[{""query"":""(full_text_myntra:(_)AND(statusid:1008))"",""start"":0,""rows"":500,""facet"":true,""facetField"":[]}]"

Dim Response As RestResponse
Set Response = MyntraClient.PostJSON("searchws/search/styleids2", json)

' It's no fun creating json string by hand, instead create it via Dictionary/Collection/Array
Dim SearchParameters As New Dictionary
SearchParameters.Add "query", "(full_text_myntra:(_)AND(statusid:1008))"
SearchParameters.Add "start", 0
SearchParameters.Add "rows", 500
SearchParameters.Add "facet", True
SearchParameters.Add "facetField", Array()

Set Response = MyntraClient.PostJSON("searchws/search/styleids2", Array(SearchParameters))

' Check status, received content, or do something with the data directly
Debug.Print Response.StatusCode
Debug.Print Response.Content
Debug.Print Response.Data("response1")("totalProductsCount")

当你说你没有得到回应,你是什么意思?你收到错误信息了吗?回答是空的吗?响应是否包含数据,但不是您想要的所有数据?我收到一个错误,说响应数据类型不兼容。运行代码时,它说“set response”标记中的“json”上的byRef参数不匹配。如果能够获得响应,请设置Response=MyntraClient.PostJSON(“searchws/search/styleids2”,json)Tim。。帮助我完成这个过程。允许在Excel REST v3.0.5()中添加Body参数的字符串、数组和集合,这实际上是为了实现本例中所需的行为而发布的。这个版本对我有用,所以我会先检查一下