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

求助:如何用VBA自动下载需病毒扫描确认的Google Drive文件

解决VBA自动下载Google Drive带病毒扫描警告文件的方法

核心解决思路:维护会话Cookie+正确提取确认Token

Google Drive的病毒扫描拦截机制,不仅需要确认Token,还依赖会话Cookie验证请求合法性。只追加Token但不携带Cookie的话,肯定会被重复拦截。以下是可落地的实现步骤:

  • 第一步:先发起初始请求,拿到会话Cookie和确认Token
    用WinHTTP请求文件导出地址(https://drive.google.com/uc?export=download&id=FILE_ID),同时保存响应返回的Set-Cookie头内容。接着从响应的HTML里提取confirm参数值——通常藏在href="/uc?export=download&id=xxx&confirm=xxx"这类链接中。

  • 第二步:携带Cookie和Token发起下载请求
    第二次请求时,必须把第一次拿到的Cookie通过请求头带上,同时URL追加&confirm=TOKEN,还要保持和第一次一致的User-Agent等请求头,模拟真实浏览器的会话流程。

示例VBA代码

Sub AutoDownloadGDriveFile()
    Dim http As Object
    Dim fileId As String, baseUrl As String, confirmToken As String
    Dim cookieContent As String, htmlResp As String
    Dim saveFilePath As String
    
    ' 替换成你的参数
    fileId = "你的文件ID"
    saveFilePath = "D:\Downloads\目标文件名.ext"
    
    Set http = CreateObject("WinHTTP.WinHTTPRequest.5.1")
    
    ' 第一步:获取Cookie和确认Token
    baseUrl = "https://drive.google.com/uc?export=download&id=" & fileId
    http.Open "GET", baseUrl, False
    http.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"
    http.Send
    
    ' 保存会话Cookie
    cookieContent = http.GetResponseHeader("Set-Cookie")
    ' 从HTML中提取确认Token(这里用简单匹配,复杂场景可换正则)
    htmlResp = http.ResponseText
    If InStr(htmlResp, "confirm=") > 0 Then
        confirmToken = Mid(htmlResp, InStr(htmlResp, "confirm=") + 8, 4) ' Token一般是4位字符
    End If
    
    ' 第二步:带Cookie和Token发起下载
    If confirmToken <> "" Then
        baseUrl = baseUrl & "&confirm=" & confirmToken
    End If
    
    http.Open "GET", baseUrl, False
    http.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"
    http.SetRequestHeader "Cookie", cookieContent
    http.Send
    
    ' 写入文件到本地
    Dim fso As Object, fileStream As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fileStream = fso.CreateTextFile(saveFilePath, True)
    fileStream.Write http.ResponseBody
    fileStream.Close
    
    ' 释放对象
    Set fileStream = Nothing
    Set fso = Nothing
    Set http = Nothing
End Sub

关键注意点

  • Cookie必须完整传递:Google通过Cookie识别会话,缺失的话Token会直接失效,必须把第一次请求返回的Cookie全带到第二次请求里。
  • Token提取可优化:如果遇到Token长度不是4位的情况,建议用正则表达式匹配,比如用RegExp对象匹配confirm=([a-zA-Z0-9]+),能更精准捕获。
  • 请求头要贴近真实浏览器:除了User-Agent,还可以加上Accept、Accept-Language等头,比如http.SetRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",降低被识别为爬虫的概率。
  • 大文件特殊处理:如果是超过扫描限制的大文件,Google会返回跳转地址到响应头的Location字段,需要提取这个地址再发起下载请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:34:54