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

VBA下载自有网站文件失败(403错误)的排查与解决

问题原因与解决方案

核心问题

403错误是因为目标服务器(atwebpages.com)的反爬虫机制拦截了你的VBA请求。Microsoft.XMLHTTP默认发送的请求头缺少浏览器标识(比如User-Agent),服务器识别出这是自动化程序发起的请求,因此拒绝访问。而维基百科的链接能正常工作,是因为其服务器对自动化请求的限制更宽松。

解决方法

在发送请求前添加模拟浏览器的请求头,最关键的是User-Agent字段,部分服务器可能还需要Referer字段辅助验证。修改你的代码如下:

Private Sub DownloadFile(myURL As String, target As String)
    Dim WinHttpReq As Object
    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    
    WinHttpReq.Open "GET", myURL, False
    ' 添加模拟浏览器的请求头
    WinHttpReq.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    WinHttpReq.setRequestHeader "Referer", "http://pavimarcon.atwebpages.com/prueba/" ' 匹配目标文件所在页面的地址
    
    WinHttpReq.Send

    Debug.Print "WinHttpReq.Status=" & WinHttpReq.Status

    If WinHttpReq.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Open
        oStream.Type = 1
        oStream.Write WinHttpReq.responseBody
        oStream.SaveToFile target, 2 ' 1 = 不覆盖, 2 = 覆盖
        oStream.Close
        Set oStream = Nothing
    End If
    Set WinHttpReq = Nothing
End Sub

额外说明

  • 如果添加User-Agent后仍报错,可以尝试补充更多常见请求头(如Accept、Accept-Language等),模拟更完整的浏览器请求。
  • 对于URLDownloadToFile函数,同样可以通过设置请求头解决,但需要借助额外的回调函数来添加头信息,实现起来不如XMLHTTP灵活,因此优先推荐修改后的XMLHTTP方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:56:02