使用Nexus 3 REST API和CURL无法下载快照依赖求助
解决Nexus 3快照制品curl下载空文件的问题
我来帮你排查这个问题——从你的描述和verbose日志里的HTTP/1.1 302 Found信息来看,核心原因其实很明确:curl默认不会自动跟随HTTP 302重定向,而Nexus的search/assets/download API正是通过返回302跳转来指向实际的快照文件的。浏览器和Gradle会自动处理这类跳转,所以它们能正常下载,而curl没做这个动作,自然就生成了空文件。
最直接的解决方案:让curl跟随重定向
给curl加上-L(大写字母L)参数,它就会自动处理302/301这类重定向请求,完整命令修改如下:
curl -u username:password -L -X GET "https://mynexusserver/service/rest/v1/search/assets/download?sort=version&repository=snapshotsrepo&maven.groupId=mygroup&maven.artifactId=myartefact&maven.extension=zip" -o myartefact.zip
几个额外需要修正/注意的细节
- 参数拼写错误:你原来命令里的
maven.artefactId是拼写错误,Nexus的REST API参数标准是maven.artifactId(注意是i不是e)。虽然浏览器和Gradle可能有一定容错性,但严格来说这个错误可能导致匹配不到制品,建议修正。 - 可以去掉多余的Accept头:你加了
-H "accept: application/json",但实际跳转后下载的是zip二进制文件,这个头其实没必要,去掉后反而更稳妥。 - 解决wget的问题:wget默认处理跳转的逻辑和curl不同,要让它正常下载需要加上
--content-disposition和--auth-no-challenge参数,比如:
wget --user=username --password=password --content-disposition --auth-no-challenge "https://mynexusserver/service/rest/v1/search/assets/download?sort=version&repository=snapshotsrepo&maven.groupId=mygroup&maven.artifactId=myartefact&maven.extension=zip"
这个命令会自动处理跳转,还能根据Nexus返回的文件名自动命名下载文件。
快速验证方法
你可以先不加-L参数,用-v运行命令,查看返回的Location响应头——里面就是最新快照的直接下载URL,这能验证Nexus确实找到了正确的制品,只是curl没自动跳转到这个地址去下载。
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

