我在Node中使用基本身份验证时遇到了一些麻烦。
以下是我如何通过cURL作为子进程来实现的:
var auth = 'Basic ' + new Buffer(username + ":" + password).toString('base64');
var url = 'https://' + hostname + path;
var curlstr = "curl #{url} -H 'Authorization: #{auth}'"
.replace('#{url}', url)
.replace('#{auth}', auth);
require('child_process').exec(curlstr, function (err, stdout, stderr){
console.log(stdout);
});
但是当我尝试https.request时它会返回403s:
var req = https.request({
hostname: hostname,
path: path,
headers: {'Authorization': auth}
}, function (res){
console.log(res.statusCode);
});
req.end();
我使用request得到了相同的结果:
request({
method: 'GET',
url: url,
auth: {
username: username,
password: password
}
}, function (err,res,body){
console.log(res.statusCode);
});
我在这里做错了什么想法?
答案 0 :(得分:1)
由于它是https,因此可以尝试添加值port
的{{1}}选项。
443
或使用var req = https.request({
hostname: hostname,
port: 443,
path: path,
headers: {'Authorization': auth}
}, function (res){
console.log(res.statusCode);
});
req.end();
选项代替auth
。
参考:http://nodejs.org/api/http.html#http_http_request_options_callback
header
答案 1 :(得分:1)
服务器期待用户代理。
request({
method: 'GET',
url: url,
headers: {'User-Agent': 'curl'},
auth: {
username: username,
password: password
}
}, function (err,res,body){
console.log(body);
});
这份工作。