在以下代碼中,您會看到具有基本身份驗證的函式:makeGET() 和 makePUT(); 您看到的這些代碼也在進行中,他們目前正在做他們的作業。我需要做的是,在所有后續呼叫中的基本身份驗證重用會話之后。
如您所見,我嘗試將標頭存盤'set-cookie'在變數中并重用它。
我在互聯網上花了幾個小時,但無法為這個問題創建解決方案。您能否推薦并展示在 NodeJS 中對 http 請求重用基本身份驗證會話的正確方法?
此外,當我嘗試使用 PUT 請求存盤和重用 cookie 時,服務器會阻止請求并出現 CSRF 錯誤。如何解決這些問題?
謝謝
let authCookie = null;
function makeGET(url, user, pass) {
let reqHeaders = {
'Accept': 'application/json'
};
if(authCookie){
reqHeaders['Cookie'] = authCookie;
}
return new Promise((resolve, reject) => {
http.get(
url,
{
auth: user ':' pass,
headers: reqHeaders
},
(res) => {
const { statusCode } = res;
const contentType = res.headers['content-type'];
if(res.headers['set-cookie'] && res.headers['set-cookie'][0]){
authCookie = res.headers['set-cookie'][0];
}
let error;
if (statusCode !== 200) {
error = new Error('Request Failed.\n'
`Status Code: ${statusCode}`);
} else if (!/^application\/json/.test(contentType)) {
error = new Error('Invalid content-type.\n'
`Expected application/json but received ${contentType}`);
}
if (error) {
authCookie = null;
console.error(error.message);
// Consume response data to free up memory
res.resume();
//resolve("");
return;
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => {
//console.log(chunk)
rawData = chunk;
});
res.on('end', () => {
try {
resolve(rawData);
} catch (e) {
authCookie = null;
console.error(e.message);
resolve("");
}
});
}).on('error', (e) => {
authCookie = null;
console.error(`Got error: ${e.message}`);
resolve("");
});
});
}
function makePUT(host, port, path, user, pass, data) {
return new Promise((resolve, reject) => {
const options = {
host: host,
port: port,
path: path,
method: 'PUT',
headers: {
'Authorization': 'Basic ' Buffer.from(user ":" pass).toString('base64'),
"Content-Type": "application/json"
}
}
const req = http.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`)
console.log(`message: ${res.statusMessage}`)
// console.log(res.headers)
resolve("success");
res.on('data', (d) => {
//process.stdout.write(d)
})
})
req.on('error', (error) => {
console.error(error)
resolve("error");
})
//req.write("")//data
req.end(JSON.stringify(data));
});
}
uj5u.com熱心網友回復:
我覺得很傻,我們使用referrer的是referer. 當我們referer使用正確的名稱設定標題時,會話現在正在被重用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/437427.html
