我试图通过Node.js http模块和Heritrix REST API向Heritrix发出拆除请求,但我一直收到401错误。我知道这个请求可以使用curl工作,因为我已经用下面的命令测试过了:
curl -v -d "action=teardown" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/a
然而,当我尝试使用Node.js http模块复制此命令时,我得到一个错误,说我未经授权。下面是我使用的代码:
const https = require('https');
const options = {
hostname: 'localhost',
port: 8443,
path: '/engine/job/a?action=teardown',
method: 'POST',
auth: 'admin:admin',
rejectUnauthorized: false
};
const req = https.request(options, res => {
console.log(`statusCode: ${res.statusCode}`);
res.on('data', d => {
process.stdout.write(d);
});
});
req.on('error', error => {
console.error(error);
});
req.end();
当我运行这段代码时,我得到以下控制台输出:
statusCode: 401
<html>
<head>
<title>Status page</title>
</head>
<body style="font-family: sans-serif;">
<p style="font-size: 1.2em;font-weight: bold;margin: 1em 0px;">Unauthorized</p>
<p>The request requires user authentication</p>
<p>You can get technical details <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2">here</a>.<br>
Please continue your visit at our <a href="/">home page</a>.
</p>
</body>
</html>
我不知道我做错了什么。有什么建议我怎么才能让这个工作吗?
1条答案
按热度按时间1dkrff031#
我对401错误的理解不多。解决这个问题的方法是通过发送一个没有任何身份验证的请求,在请求头中有
'Content-Type': 'application/x-www-form-urlencoded'
,并从WWW-Authenticate头阅读该质询,来向服务器请求一个身份验证质询。然后使用这个挑战来产生新的响应。