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

VBA通过GET请求获取URL文件返回200但未成功下载的问题咨询

如何通过VBA无需浏览器加载Amazon API返回的报告文件?

我通过Amazon API生成了一份报告,API返回了文件URL,相关获取文件的说明如下(附截图链接)。我尝试了以下VBA代码:

Sub t()

TargetURL = "https://offline-report-storage-eu-west-1-prod.......d"
'Set HTTPReq = CreateObject("MSXML2.XMLHTTP")
'Set HTTPReq = CreateObject("MSXML2.ServerXMLHTTP")
Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1")
HTTPReq.Option(4) = 13056 '
HTTPReq.Open "GET", TargetURL, False
HTTPReq.send 

End Sub

请求状态显示为200,看似正常,但未成功加载文件。将该链接复制到浏览器中可正常获取文件,说明链接有效。请问如何无需打开浏览器即可成功加载该文件?


问题分析

状态码200说明请求已成功获取响应,但原代码仅发送了请求,未处理返回的文件数据——浏览器会自动解析响应并完成下载/展示,而VBA需要手动将响应字节流保存为本地文件。

解决代码

修改代码,添加响应内容的保存逻辑:

Sub DownloadAmazonReport()
    Dim TargetURL As String
    Dim HTTPReq As Object
    Dim FileStream As Object
    Dim SavePath As String
    
    TargetURL = "https://offline-report-storage-eu-west-1-prod.......d"
    SavePath = "C:\Your\Save\Directory\report.csv" ' 替换为实际保存路径及对应格式的文件名
    
    Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1")
    HTTPReq.Option(4) = 13056 ' 若环境允许,可移除该行以启用证书验证
    HTTPReq.Open "GET", TargetURL, False
    
    ' 可选:模拟浏览器请求头,解决部分反爬限制
    HTTPReq.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    
    HTTPReq.send
    
    If HTTPReq.Status = 200 Then
        Set FileStream = CreateObject("ADODB.Stream")
        With FileStream
            .Type = 1 ' 二进制模式处理文件
            .Open
            .Write HTTPReq.ResponseBody
            .SaveToFile SavePath, 2 ' 2=覆盖已有文件,1=仅当文件不存在时保存
            .Close
        End With
        MsgBox "文件已保存至: " & SavePath
    Else
        MsgBox "请求失败,状态码: " & HTTPReq.Status
    End If
    
    ' 释放资源
    Set HTTPReq = Nothing
    Set FileStream = Nothing
End Sub

关键注意事项

  • 文件格式匹配:确保SavePath的后缀与Amazon报告实际格式一致(常见为.csv),否则文件可能无法正常打开。
  • 权限与路径:选择有写入权限的保存目录,避免系统盘根目录等受保护路径。
  • 证书验证:HTTPReq.Option(4) = 13056用于禁用证书验证,仅在测试或特殊环境下使用,生产环境建议移除以保证安全。
  • 请求头模拟:若添加后仍无法成功,可检查浏览器请求的其他头信息(如Accept)并补充到VBA代码中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:32:46