You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA爬虫适配嵌套字典Requestpayload获取NiftyIndices数据失败求助

解决方案

问题核心是网站要求的请求 payload 改为嵌套结构:外层是包含cinfo键的字典,cinfo的值是另一个包含索引参数的JSON字符串。以下是修改后的VBA代码:

Dim url As String
Dim innerPayload As Object, outerPayload As Object
Dim requestPayload As String
Dim startD As Date, endD As Date
Dim req As Object, responseJSON As Object

' 初始化目标日期(按需修改)
startD = DateSerial(2024, 5, 1)
endD = DateSerial(2024, 5, 30)

url = "https://www.niftyindices.com/Backpage.aspx/getHistoricaldatatabletoString"

' 1. 构造内层参数字典(包含网站要求的所有字段)
Set innerPayload = CreateObject("Scripting.Dictionary")
innerPayload("name") = "NIFTY 50"
innerPayload("startDate") = Day(startD) & "-" & MonthName(Month(startD), True) & "-" & Year(startD)
innerPayload("endDate") = Day(endD) & "-" & MonthName(Month(endD), True) & "-" & Year(endD)
innerPayload("indexName") = "NIFTY 50" ' 新增网站要求的必填字段

' 2. 将内层字典转为JSON字符串
Dim innerJson As String
innerJson = JsonConverter.ConvertToJson(innerPayload)

' 3. 构造外层字典,包裹cinfo字段
Set outerPayload = CreateObject("Scripting.Dictionary")
outerPayload("cinfo") = innerJson

' 4. 生成最终的请求Payload
requestPayload = JsonConverter.ConvertToJson(outerPayload)

' 发送请求并处理响应
Set req = CreateObject("MSXML2.XMLHTTP.6.0")
With req
    .Open "POST", url, False
    .setRequestHeader "Content-Type", "application/json; charset=UTF-8"
    .setRequestHeader "X-Requested-With", "XMLHttpRequest"
    .send requestPayload
    
    If .Status = 200 Then
        Set responseJSON = JsonConverter.ParseJson(.responseText)
        Debug.Print responseJSON("d") ' 输出响应数据
    Else
        Debug.Print "请求失败,状态码:" & .Status
    End If
End With

' 释放对象
Set innerPayload = Nothing
Set outerPayload = Nothing
Set req = Nothing
Set responseJSON = Nothing

关键修改说明:

  • 补充indexName字段:网站新的payload要求必须包含该参数,原代码缺失导致请求无效
  • 嵌套结构构造:先生成内层参数的JSON,再将其作为cinfo的值封装到外层字典,完全匹配网站要求的payload格式
  • 增加状态码判断:方便快速排查请求失败的原因

注意事项:

  • 确保已安装并引用VBA-JSON库(JsonConverter依赖)
  • 日期格式严格遵循DD-MMM-YYYY格式(如01-May-2024),否则网站无法解析
  • 若仍返回空数据,可尝试添加User-Agent请求头模拟浏览器访问,部分网站会验证请求来源

内容的提问来源于stack exchange,提问作者Swat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:05:14