我想使用只读访问令牌做三件事,这样网页用户就不需要提供Gitlab身份验证。我必须使用标头中的访问令牌提交GET请求,并且还没有完全弄清楚如何在Javascript中处理响应。
- 读取工件路径中特定.JSON文件的内容,并分配给变量
- 触发工件路径中特定.XLSX文件的下载,并保存到磁盘
- 触发完整工件archive.ZIP的下载并保存到磁盘
我的代码
var myHeader = new Headers();
myHeader.append("PRIVATE-TOKEN", accessToken);
var myInit = {
method: 'GET',
headers: myHeader
};
var myRequest = new Request(artifactPath, myInit);
// response?
文档
为1和2提供的指导:
GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name
curl --location --header "PRIVATE-TOKEN: <your_access_token>"
"https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/raw/some/release/file.pdf?job=pdf"
为3:提供的指导
GET /projects/:id/jobs/artifacts/:ref_name/download?job=name
curl --header "PRIVATE-TOKEN: <your_access_token>"
"https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/download?job=test"
我觉得Ajax会有所帮助,但我从未使用过。非常感谢所有可行的简单性!
AJAX可以通过2个浏览器API使用本机JavaScript。
您有XMLHttpRequest(较旧、更兼容但语法丑陋(:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/path/to/get');
xhr.setRequestHeader('Your-Header-Name', 'Value');
xhr.onload = function() {
// What this is depends on what kind of data the endpoint returned
console.log(xhr.response);
}
xhr.send();
MDN参考
现代JavaScript用户通常更喜欢Fetch API(更新、不太兼容、干净的语法(:
// Note this will contain some ES6 stuff, such as Promises
fetch('https://example.com/path/to/get', {
// This is optional: method is GET by default
method: 'GET',
headers: {
'Your-Header-Name': 'Value'
}
}).then(res =>
// You can do res.arrayBuffer(), .text(), but assuming the response is JSON...
res.json()
).then(console.log);
MDN参考
我通常使用fetch
,但您使用的方法主要是个人偏好。