如何使用Node.JS请求HTTP Digest auth?

Mil*_*ilo 9 httprequest digest digest-authentication http-digest node.js

我必须用Node.JS编写一些代码来获取API文档,但是我在最近几天尝试了我在网上找到的所有解决方案(包括Stack当然)都没有成功...

我的API使用HTTP Digest Auth,这就是问题,我能够连接,这不是什么大问题,但每次我得到相同的回报:

Got response : 401
HTTP Digest Authentication required for "api.example.com"
Run Code Online (Sandbox Code Playgroud)

你可以在没有auth的情况下显示我的基本代码!因为我做了所有的尝试后我不知道自己能做什么:

var http = require('http')

var options = {
    host: 'api.example.com',
    path: '/example/1.xml',
};

var request = http.get(options, function(res){
    var body = "";
    res.on('data', function(data){
        body += data;
    })
    res.on('end', function(){
        console.log('Got response : ' + res.statusCode);
        console.log(body);
    })
    res.on('error', function(e){
        console.log('Got error : ' +e.message);
    });
});
Run Code Online (Sandbox Code Playgroud)

我最后一次尝试是使用这个模块https://npmjs.org/package/request但是每次我得到401时他都不会工作!

有关更多信息,我能够使用Ruby,Python,php和Java连接并获取我需要的API信息,因此我确信我的API运行良好,并且我传递的信息是正确的.我使用Node v0.10.11的最后一个稳定版!

如果有人可以帮助我或找到解决方案,我会很高兴.

编辑:我将使用模块Mickael/request添加有关我的测试的一些细节

第一次尝试 :

var request = require('request')

var options = {
    'url': 'http://api.example.fr/example/1.xml',
    'auth': {
        'user': 'test',
        'pass': 'test',
        'sendImmediately': false
    }
};

var request = request.get(options, function(error, response, body){
    if (!error && response.statusCode == 200){
        console.log('body : ' + body)
    }
    else{
        console.log('Code : ' + response.statusCode)
        console.log('error : ' + error)
        console.log('body : ' + body)
    }
});
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

var request = require('request')

request.get('http://api.example.fr/example/1.xml', function(error, response, body){
    if (!error && response.statusCode == 200){
        console.log('body : ' + body)
    }
    else{
        console.log('Code : ' + response.statusCode)
        console.log('error : ' + error)
        console.log('body : ' + body)
    }
}).auth('test', 'test', false);
Run Code Online (Sandbox Code Playgroud)

但回报仍然是401

Pet*_*ons 11

以下是您的示例request,根据其API 进行更正.

var options = {
  uri: 'http://api.example.fr/example/1.xml',
  auth: {
    user: 'test',
    pass: 'test',
    sendImmediately: false
  }
};
request(options, function(error, response, body){
    if (!error && response.statusCode == 200){
        console.log('body : ' + body)
    }
    else{
        console.log('Code : ' + response.statusCode)
        console.log('error : ' + error)
        console.log('body : ' + body)
    }
});
Run Code Online (Sandbox Code Playgroud)

请求可链接样式API有点令人困惑(恕我直言),但我相信你也可以这样做.