我正在尝试使用需要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的其他实现中,浏览器跨越多个数据包的请求。不确定这是否是它不起作用的原因,或者可能只是一种不同的做事方式。
提前致谢。