curl - 当存储库中存在人工制品文件时,人工制品 cURL 下载返回 404 File Not Found 错误
问题描述
我正在使用 Artifactory 在我的 CICD 管道中构建工件存储。
我使用 PowerSHell 脚本中的 cURL API 调用编写了工件推送到存储库的脚本:
curl.exe -H "X-JFrog-Art-Api: $apiKey" -X PUT $repoUrl -T $artifactFilePath
这成功执行,工件文件按预期存放在指定的 Artifactory 存储库中。
后来,我尝试使用以下 cURL API 调用下载相同的工件文件:
curl.exe -H "X-JFrog-Art-Api: $apiKey" -X GET $artifactUrl
即使我可以浏览 Artifactory GUI 并清楚地看到子存储库中的工件文件,执行 GET 请求也会返回:
{
"errors" : [ {
"status" : 404,
"message" : "File not found."
} ]
}
我已经检查并再次检查了他的存储库路径是否正确(它与初始上传请求中的路径一致)。我为每个请求使用了相同的 API 密钥,并确认关联的功能 ID 在存储库中具有读取、写入、注释和删除权限。
我已经为此工作了几个小时,到目前为止还无法识别或解决问题。对此问题的见解或建议将非常受欢迎。
更新:
使用 '-v- 开关执行 cURL 请求以获得详细输出返回:
- 连接到 www.[Artifactory URL].net (169.177.244.86) 端口 443 (#0)
- schannel:与 www.[Artifactory URL].net 端口 443 的 SSL/TLS 连接(步骤 1/3)
- schannel:检查服务器证书吊销
- schannel:发送初始握手数据:发送 201 字节...
- schannel:发送初始握手数据:发送201字节
- schannel:与 www.[Artifactory URL].net 端口 443 的 SSL/TLS 连接(步骤 2/3)
- schannel:接收握手失败,需要更多数据
- schannel:与 www.[Artifactory URL].net 端口 443 的 SSL/TLS 连接(步骤 2/3)
- schannel:加密数据得到 2415
- schannel:加密数据缓冲区:偏移量 2415 长度 4096
- schannel:发送下一次握手数据:发送 126 字节...
- schannel:与 www.[Artifactory URL].net 端口 443 的 SSL/TLS 连接(步骤 2/3)
- schannel:加密数据得到 290
- schannel:加密数据缓冲区:偏移量 290 长度 4096
- schannel:SSL/TLS 握手完成
- schannel:与 www.[Artifactory URL].net 端口 443 的 SSL/TLS 连接(步骤 3/3)
- schannel:存储在会话缓存中的凭据句柄
GET /[Artifactory repo]/[Artifactory repo path]/[artifact file name].txt HTTP/1.1 Host: www.[Artifactory URL].net User-Agent: curl/7.55.1 Accept: / X-JFrog-Art -Api: [API 密钥] 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 0 0 0 0 0 0 0 0 --:-- :-- 0:00:02 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:05 -- :--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:06 --:--:-- 0 0 0 0 0 0 0 0 0 --:-- :-- 0:00:07 --:--:-- 0
- 哑弹
- schannel:客户端要读取 102400 字节
- schannel: encdata_buffer 调整大小 103424
- schannel:加密数据缓冲区:偏移量 0 长度 103424
- schannel:加密数据得到 1144
- schannel:加密数据缓冲区:偏移量 1144 长度 103424
- schannel:解密数据长度:1115
- schannel:解密数据添加:1115
- schannel:已缓存的解密数据:偏移量 1115 长度 102400
- schannel:加密数据缓冲区:偏移量 0 长度 103424
- schannel:解密数据缓冲区:偏移量 1115 长度 102400
- schannel: schannel_recv 清理
- schannel:解密数据返回1115
- schannel:解密数据缓冲区:偏移量 0 长度 102400 < HTTP/1.1 200 OK < 日期:2020 年 2 月 19 日,星期三 17:04:58 GMT < Content-Type:text/plain < Content-Length:3 < Connection:keep-alive < Server: Artifactory/6.16.0 < X-Artifactory-Id: d9260ad7ca1d26ab34fdd4717e47fdd9abc8e83f < X-Artifactory-Node-Id: prodnode3 < Last-Modified: Thu, 23 Jan 2020 15:30:10 GMT < ETag: 7744ffc8156c74a9ce68f9cc621ac37624549928 < X-Checksum -Sha1: 7744ffc8156c74a9ce68f9cc621ac37624549928 < X-Checksum-Sha256: b4fae8fae2070cbb6c52c22baf32eb1995be678f93e760dfddb60b166bd1a90f < X-Checksum-Md5: 807dfcc396f827846e9631b735c7e808 < Accept-Ranges: bytes < X-Artifactory-Filename: [artifact file name].txt < Content-Disposition: attachment; filename="[工件文件名].txt"; 文件名*=UTF-8'' [工件文件名].txt < X-Frame-Options: DENY < X-Content-Type-Options: nosniff < X-XSS-Protection: 1; 模式 = 块 < 严格传输安全性:最大年龄 = 31536000;包括子域;preload < Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src“自我”数据:;style-src 'self' 'unsafe-inline'; font-src 'self' 数据:不安全的内联'; font-src 'self' 数据:不安全的内联'; font-src 'self' 数据: https://themes.googleusercontent.com;object-src 'none' < { [3 字节数据] 100 3 0 3 0 0 0 0 --:--:-- 0:00:08 --:--:-- 0100 3 0 3 0 0 0 0 --:--:-- 0:00:08 --:--:-- 0
- 连接 #0 到主机 www.[Artifactory URL].net 保持原样 Blockquote
解决方案
最初的 404 问题显然是由于原始 cURL API 调用中我的工件 URL 中的错误。
上面的日志显示了 URL 被纠正后的调用返回。即使使用正确的工件路径,文件似乎也没有按预期下载。注意,上面详细调用日志中的“dud”是文本文件的内容,表示找到并成功读取了该文件。
最后,添加“--output”开关并指定文件名,导致工件文件下载成功。
推荐阅读
- mysql - 如何根据不存在于mysql的另一个表中进行更新?
- sql - 通过触发器将视图中的记录插入表中
- ruby-on-rails - default_value_for 中使用的关联因 FactoryBot 失败
- python - Pandas:如何获取一列中每个项目的最后一个每日值并从每行中的值中减去它
- snowflake-cloud-data-platform - 读者帐户可以连接到第 3 方 BI 工具(例如 Tableau)吗?
- python - 无法从 Web 表中抓取 Covid-19 数据
- php - 如何显示从数据库获取的参数
- dhall - Dhall 环境变量值作为联合替代方案
- django - Django:确保在多个视图调用中都可以访问复杂对象
- oracle-apex - 如何知道谁在 oracle apex 中提交表单?