求助:如何用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
相关产品推荐
相关产品推荐

