我真的很疯狂通过网络和stackoverflow寻找这个。 关于这个主题的其他帖子谈论http请求,而不是httpS。
我用node.js编写服务器端,我需要向其他网站发出https请求才能登录
如果我在chrome中使用postman工具尝试使用https://user:pass@webstudenti.unica.it/esse3/auth/Logon.do一切正常,我就会登录。
如果我在节点中使用请求库,我就无法登录,并且我得到一个页面,其中包含有关我的获取/发送数据中的错误的自定义错误消息。
也许我错误地设置传递给请求的选项。
var request = require('request');
var cheerio = require('cheerio');
var user = 'xxx';
var pass = 'yyy';
var options = {
url : 'https://webstudenti.unica.it',
path : '/esse3/auth/Logon.do',
method : 'GET',
port: 443,
authorization : {
username: user,
password: pass
}
}
request( options, function(err, res, html){
if(err){
console.log(err)
return
}
console.log(html)
var $ = cheerio.load(html)
var c = $('head title').text();
console.log(c);
})
答案 0 :(得分:4)
您未正确设置http auth options(即authorization
应改为auth
)。它应该看起来像:
var options = {
url: 'https://webstudenti.unica.it',
path: '/esse3/auth/Logon.do',
method: 'GET',
port: 443,
auth: {
user: user,
pass: pass
}
}
答案 1 :(得分:3)
http / https应该在身份验证方面没有区别。您的用户/通行证很可能需要进行base64编码。尝试
var user = new Buffer('xxx').toString('base64');
var pass = new Buffer('yyy').toString('base64');
答案 2 :(得分:1)
使用更新的版本,我可以使用基本身份验证进行https呼叫。
var request = require('request');
request.get('https://localhost:15672/api/vhosts', {
'auth': {
'user': 'guest',
'pass': 'guest',
'sendImmediately': false
}
},function(error, response, body){
if(error){
console.log(error)
console.log("failed to get vhosts");
res.status(500).send('health check failed');
}
else{
res.status(200).send('rabbit mq is running');
}
})
答案 3 :(得分:0)
不要使用 npm 包 request
,因为它已被弃用,请改用 Node 原生 https
const https = require('https')
var options = {
host: 'test.example.com',
port: 443,
path: '/api/service/'+servicename,
// authentication headers
headers: {
'Authorization': 'Basic ' + new Buffer(username + ':' + passw).toString('base64')
}
};
//this is the call
request = https.get(options, function(res){
console.log(`statusCode: ${res.statusCode}`)
res.on('data', d => {
process.stdout.write(d)
})
})
req.on('error', error => {
console.error(error)
})
req.end()