使用wget下载GitHub Actions artifact返回400错误的解决方案咨询
报错原因
出现400 Bad Request和权限无关,基本是两个原因导致的:
- 执行wget命令时未给URL加引号,Shell会将URL中的
&解析为后台运行标识符,实际传给wget的URL在第一个&处被截断,缺失签名、过期时间等必填参数,自然被服务端拒绝。 - 该签名下载端点对非浏览器请求有基础校验,wget默认携带的User-Agent、Accept请求头不符合端点要求,即使URL完整也会被拦截。
可行方案
不需要换特殊工具,wget本身就可以正常下载,调整命令参数即可:
方案1:使用wget下载
执行时用双引号包裹完整URL,同时补充必要请求头模拟浏览器请求即可:
wget -O my-artifact.zip \ --header="Accept: application/octet-stream" \ --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" \ "替换为你拿到的完整签名下载URL"
参数说明:
-O my-artifact.zip:指定下载后的保存文件名,避免端点返回的默认文件名乱码- 双引号包裹URL:必须加,防止Shell截断URL参数
- 补充的两个请求头:绕过端点对非浏览器请求的拦截
方案2:使用curl下载
如果wget调整后仍报错,直接用你之前调用GitHub API的curl工具即可,兼容性更好:
curl -L -o my-artifact.zip \ -H "Accept: application/octet-stream" \ "替换为你拿到的完整签名下载URL"
参数说明:
-L:必须加,该端点下载时会触发302重定向,不加这个参数只会拿到重定向响应而不是实际文件- 同样需要用双引号包裹完整URL
注意:你获取到的签名链接有效期仅1分钟,必须在链接过期前执行下载命令,过期后需要重新调用GitHub API获取新的链接。
内容的提问来源于stack exchange,提问作者Mathew
相关产品推荐
相关产品推荐

