7

Devo scrivere un codice con Node.JS per una documentazione API, ma ho provato negli ultimi giorni tutte le soluzioni che ho trovato sul Web (incluso Stack, naturalmente) senza successo ...Come richiedere l'autenticazione HTTP Digest con Node.JS?

My API utilizzare HTTP Digest auth e questo è il problema, sono stato in grado di connettersi, di quella non era un grosso problema, ma ogni volta che ho avuto lo stesso rendimento:

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

È possibile mostrare il mio codice di base sottostante senza autenticazione! Perché io non so cosa posso fare, dopo tutto la prova che ho fatto:

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

Un mio ultimo tentativo è stato quello di utilizzare questo modulo https://npmjs.org/package/request ma non funziona troppo, come ogni volta che ho avuto 401!

Per ulteriori informazioni, sono riuscito a connettermi e ottenere le informazioni necessarie dalla mia API con Ruby, Python, php e Java, quindi sono sicuro che la mia API funzioni correttamente e le informazioni che ho trasmesso siano corrette. Io uso l'ultima stalla del Nodo v0.10.11!

Se qualcuno può aiutarmi o avere una soluzione aggiornata sarei felice.

EDIT: vorrei aggiungere alcuni dettagli circa il mio test con il modulo Mickael/request

prima prova:

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

Seconda Prova:

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

ma il ritorno è sempre lo stesso 401

risposta

6

Ecco il tuo esempio e corretto per utilizzare request secondo la sua 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) 
    } 
}); 

La richiesta stile chainable API è un po 'di confusione (IMHO), ma io credo che si possa farlo funzionare in questo modo pure.

+0

Grazie per il suggerimento ma come ho detto nel mio post originale, ho provato questa soluzione è possibile trovare il link alla fine del mio post! – Milo

+0

Pubblica il tuo codice usando 'request'. "L'ho provato e non ha funzionato" non è abbastanza per noi per aiutarti davvero. –

+0

Stavo modificando per aggiungere il mio codice usando la richiesta. grazie per il vostro aiuto :) – Milo

1

L'autorizzazione digest nel pacchetto di richiesta sembra essere incompleta.

È possibile provare: https://npmjs.org/package/http-digest-client, è un'implementazione leggera abbastanza decente per l'autenticazione digest.

Se è necessario eseguire un digest POST con un messaggio del corpo da inviare, è possibile utilizzare la richiesta insieme a http-digest-client. Dopo aver installato entrambi, apri semplicemente il codice http-digest-client sotto node-modules e sostituisci l'uso del pacchetto http con il pacchetto di richiesta api.