7

Muszę napisać kod z Node.JS dla dokumentacji API, ale wypróbowałem przez ostatnie kilka dni wszystkie rozwiązania, które mogłem znaleźć w Internecie (w tym Stack oczywiście) bez sukcesu ...Jak zrobić żądanie uwierzytelnienia HTTP Digest za pomocą Node.JS?

Moje API użyj protokołu HTTP Digest auth i to jest problem, udało mi się połączyć, to nie było nic wielkiego, ale za każdym razem mam ten sam zwrot:

Got response : 401 
HTTP Digest Authentication required for "api.example.com" 

można pokazać mój kod bazowy poniżej bez uwierzytelniania! Bo nie wiem, co mogę zrobić po całej próbie zrobiłem:

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); 
    }); 
}); 

Jednym z mojej ostatniej próbie było użyć tego modułu https://npmjs.org/package/request ale nie działa zbyt, jak za każdym razem mam 401!

Aby uzyskać więcej informacji, udało mi się połączyć i uzyskać potrzebne informacje z mojego API za pomocą Ruby, Python, php i Java, więc jestem pewien, że moje API działa dobrze i informacje, które przekazuję są poprawne. Używam ostatniej stabilnej węzła v0.10.11!

Jeśli ktoś może mi pomóc lub ma rozwiązanie na czasie, będę zadowolony.

EDIT: dodam kilka szczegółów o moim teście z modułem Mickael/request

najpierw spróbować:

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) 
    } 
}); 

drugie Spróbuj:

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); 

ale powrót jest wciąż ten sam 401

Odpowiedz

6

Oto twój przykład Poprawiono, aby używać request zgodnie z 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) 
    } 
}); 

Żądanie styl chainable API jest nieco mylące (IMHO), ale uważam, że można zrobić to działa w ten sposób, jak również.

+0

Dziękuję za sugestię, ale jak powiedziałem w moim oryginalnym wpisie, próbowałem tego rozwiązania, możesz znaleźć link na końcu mojego posta! – Milo

+0

Zamieść swój kod za pomocą 'request'. "Próbowałem i to nie działało", nie wystarczy nam, abyśmy ci pomogli. –

+0

Edytowałem, aby dodać mój kod za pomocą żądania. dziękuję za pomoc :) – Milo

1

Autoryzacja skrótu w pakiecie żądania wydaje się niekompletna.

Możesz wypróbować: https://npmjs.org/package/http-digest-client, jest to całkiem przyzwoita, lekka implementacja do uwierzytelniania digest.

Jeśli potrzebujesz autotestu POST z treścią do wysłania, możesz użyć żądania w połączeniu z http-digest-client. Po zainstalowaniu obu po prostu otwórz kod http-digest-client pod węzłem-moduły i zastąp jego użycie pakietu http z api pakietu żądania.

Powiązane problemy