我当前正在使用 HPCC 集群,它具有登录凭据。在创建 json 请求时,为了从 roxie 查询获取响应,我们将被重定向到登录页面。如何使用我的凭据并使用 javascript 创建请求来获取响应?
<script>
document.getElementById('loginForm').addEventListener('submit', function(event) {
event.preventDefault();
var username = 'username';
var password = 'password';
login(username, password)
.then(() => {
document.getElementById('output').innerHTML = '<p>Login successful.</p>';
window.location.href = 'http://cluster_abc:8002/esp/files/Login.html';
})
.catch(error => {
console.error('Error:', error);
document.getElementById('output').innerHTML = '<p>Login failed. Please try again.</p>';
});
});
function login(username, password) {
return new Promise((resolve, reject) => {
var loginUrl = 'http://university-roxie.us-hpccsystems-dev.azure.lnrsg.io:8002/esp/login';
var formData = new FormData();
formData.append('username', username);
formData.append('password', password);
fetch(loginUrl, {
method: 'POST',
body: formData
})
.then(response => {
if (!response.ok) {
throw new Error('Login failed');
}
resolve();
})
.catch(error => {
reject(error);
});
});
}
</script>
实现此目的的一种方法是向所需的 API 提交请求并包含基本授权标头。例如,获取给定工作单元 ID 的 WUInfo:
const headers = new Headers();
headers.set("Authorization", `Basic ${btoa("username:password")}`);
headers.set("Content-Type", "application/json");
fetch("https://clustername:8010/WsWorkunits/WUInfo", {
method:'POST',
headers: headers,
body: JSON.stringify({
WUInfoRequest: {
Wuid: "W20240430-130438"
}
})
})
.then(async (response) => {
const json = await response.json();
console.log(json);
})
.catch(err => console.error(err));
您可以查看 https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#headers 了解有关 Fetch、标头等的更多信息。
您可能还想查看 HPCC-JS 库 (https://github.com/hpcc-systems/visualization)。 comms 包中有一些机制用于与集群通信、查询 WU 等。