我正在尝试使用需要NTLM身份验证的企业Web代理后面的Node发出请求 . 我尝试过使用代理代理等几个库,但收效甚微 .
这是使用请求库的代码的简化版本和类似于代理代理的ntlm.js . 我希望在最后一次请求电话后收到成功的回复,但由于某种原因,我仍然得到407 -
var ntlmRequest = function(req) {
var ntlmOptions = {};
ntlmOptions.ntlm = {};
ntlmOptions.method = 'GET';
ntlmOptions.path = 'http://www.jsonip.co.uk';
ntlmOptions.ntlm.username = 'USERNAME';
ntlmOptions.ntlm.password = 'Pa$$word';
ntlmOptions.ntlm.workstation = 'PC-NAME';
ntlmOptions.ntlm.domain = 'DOMAIN';
var type1message = ntlm.createType1Message(ntlmOptions.ntlm);
var requestOptions = {
url: 'http://www.jsonip.co.uk',
proxy: 'http://webproxy.domain.com:8080',
headers: req.headers
};
requestOptions.headers['Proxy-Authorization'] = type1message;
requestOptions.headers['Proxy-Connection'] = 'Keep-Alive'
request(requestOptions, function(err,res){
var type2message = ntlm.parseType2Message(res.headers['proxy-authenticate']);
var type3message = ntlm.createType3Message(type2message, ntlmOptions.ntlm);
requestOptions.headers['Proxy-Authorization'] = type3message;
request(requestOptions, function(err,res){
console.log(res.statusCode);
});
});
};
我已经尝试比较一些数据包捕获和工作的NTLM请求(使用curl)我可以在类型1和类型3请求期间看到这一点 -
[HTTP request 1/2]
[HTTP request 2/2]
我的要求只显示1/1 .
我想也许在NTLM的其他实现中,浏览器跨越多个数据包的请求 . 不确定这是不是因为它不起作用的原因,或者可能只是一种不同的做事方式 .
提前致谢 .