VBA通过MSXML2.XMLHTTP传递凭证访问GitHub获取工件下载URL求助
解决GitHub Action工件下载URL的凭证验证问题
我来帮你搞定这个GitHub凭证验证的问题——你之前用用户名密码直接做HTTP Basic Auth的路子现在走不通了,GitHub早在几年前就把这种验证方式给弃用了,不管是访问API还是受保护的Action工件页面都不行。下面是具体的解决方案:
核心原因
GitHub不再支持使用账户密码进行HTTP Basic Auth验证,必须改用**个人访问令牌(PAT)**作为验证凭证,同时要确保令牌拥有足够的权限来读取Action工件。
步骤1:生成带正确权限的个人访问令牌
- 登录GitHub,进入「Settings」→「Developer settings」→「Personal access tokens」→「Tokens (classic)」(经典令牌更适合这类场景)
- 点击「Generate new token」,设置令牌有效期,然后勾选**
actions:read**权限(这是读取Action工件的必要权限),如果需要其他权限可以按需添加 - 生成后务必立刻保存好令牌,因为它只会显示一次,丢失了就得重新生成
步骤2:修改你的VBA代码
把原来的用户名密码验证替换为PAT验证,注意:用户名可以填任意值(比如x-oauth-basic,GitHub会忽略这个值,只认令牌),密码栏填你刚生成的PAT。修改后的代码示例:
Dim xmlhttp As Object Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0") ' 建议使用最新版本的XMLHTTP对象,避免协议兼容问题 With xmlhttp .Open "GET", "https://github.com/decaf-emu/decaf-emu/actions/runs/2458383", False, "x-oauth-basic", "你的个人访问令牌" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" .Send If .Status = 200 Then html.body.innerHTML = .responseText ' 这里可以继续解析HTML,找到包含artifacts/897163的下载链接 Else MsgBox "请求失败,状态码:" & .Status & vbCrLf & .StatusText End If End With Set xmlhttp = Nothing
额外优化建议
如果你只是想直接获取工件的下载URL,用GitHub API比解析HTML更可靠。可以调用这个API端点:GET /repos/decaf-emu/decaf-emu/actions/runs/2458383/artifacts
返回的JSON数据里,每个工件都会包含archive_download_url字段,这个URL可以直接用于下载(同样需要用PAT验证)。
另外要注意:
- 确保你的XMLHTTP对象是
MSXML2.XMLHTTP.6.0或更高版本,旧版本可能不支持TLS 1.2,导致连接失败 - 如果还是遇到401 Unauthorized错误,检查PAT的权限是否正确,或者令牌是否过期/输入错误
内容的提问来源于stack exchange,提问作者Exequiel
相关产品推荐
相关产品推荐

