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

提前致谢 .