7

Ich muss Code mit Node.JS für eine API-Dokumentation schreiben, aber ich habe die letzten paar Tage alle Lösungen, die ich im Internet (einschließlich Stack natürlich) ohne Erfolg finden konnte ...Wie HTTP-Digest-Auth mit Node.JS anfordern?

Meine API verwenden HTTP Digest Auth und das ist das Problem, ich war in der Lage zu verbinden, war, dass das keine große Sache, aber jedes Mal bekam ich die gleiche Rendite:

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

Sie können meinen Basiscode unten ohne Auth zeigen! Weil ich weiß nicht, was ich nach all den Versuch machen kann ich tat:

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

Einer meiner letzten Versuch war dieses Modul https://npmjs.org/package/request zu verwenden, aber er funktioniert nicht zu, wie immer wenn ich 401 bekam!

Für weitere Informationen konnte ich die benötigten Informationen von meiner API mit Ruby, Python, PHP und Java verbinden und abrufen, so dass ich sicher bin, dass meine API gut funktioniert und die von mir übergebenen Informationen korrekt sind. Ich benutze den letzten Stable von Node v0.10.11!

Wenn jemand mir helfen kann oder eine Lösung auf dem neuesten Stand habe, werde ich mich freuen.

EDIT: Ich werde einige Details über meinen Test mit dem Modul hinzufügen Mickael/request

erster Versuch:

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

zweiter Versuch:

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

aber die Rückkehr ist immer noch die gleiche 401

Antwort

6

Hier ist Ihr Beispiel e korrigiert, um request gemäß seiner API zu verwenden.

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

Die Anfrage verkettbar Stil API ist ein bisschen (IMHO) verwirrend, aber ich glaube, man kann es aber auch, dass die Art und Weise arbeiten.

+0

Vielen Dank für den Vorschlag, aber wie ich in meinem ursprünglichen Beitrag sagte, habe ich versucht, diese Lösung finden Sie den Link am Ende meines Beitrags! – Milo

+0

Poste deinen Code mit 'request'. "Ich habe es versucht und es hat nicht funktioniert" ist nicht genug für uns, um Ihnen wirklich zu helfen. –

+0

Ich habe bearbeitet, um meinen Code mit Anfrage hinzuzufügen. Danke für Ihre Hilfe :) – Milo

1

Die Digestauth im Anforderungspaket scheint unvollständig zu sein.

Sie können ausprobieren: https://npmjs.org/package/http-digest-client, es ist eine ziemlich anständige leichte Implementierung für die Digest-Authentifizierung.

Wenn Sie einen Digest-Auth-POST mit einer Body-Nachricht zum Senden benötigen, können Sie die Anfrage in Verbindung mit http-Digest-Client verwenden. Nach der Installation öffnen Sie einfach den http-digest-client code unter node-modules und ersetzen Sie die Verwendung des HTTP-Pakets durch das Anfragepaket api.