7

Je dois écrire du code avec Node.JS pour une documentation API, mais j'ai essayé ces derniers jours toutes les solutions que j'ai pu trouver sur le web (y compris Stack bien sûr) sans succès ...Comment faire pour demander HTTP Digest auth avec Node.JS?

Mon API utiliser HTTP Digest auth et c'est le problème, j'ai pu me connecter, que ce n'était pas une grosse affaire, mais chaque fois que j'obtenu le même rendement:

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

Vous pouvez afficher mon code de base ci-dessous sans auth! Parce que je ne sais pas ce que je peux faire après tout essayer, je l'ai fait:

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 de mon dernier essai était d'utiliser ce module https://npmjs.org/package/request mais il ne fonctionne pas trop que chaque fois que je suis arrivé 401! Pour plus d'informations j'ai pu me connecter et obtenir les informations dont j'avais besoin de mon API avec Ruby, Python, PHP et Java, donc je suis sûr que mon API fonctionne bien et les informations que je transmets sont correctes. J'utilise la dernière stable de Node v0.10.11!

Si quelqu'un peut m'aider ou avoir une solution à jour, je serai heureux.

EDIT: je vais ajouter quelques détails au sujet de mon test avec le module Mickael/request

premier essai:

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

Deuxième essai:

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

mais le retour est toujours le même 401

Répondre

6

Voici votre exemple e corrigé pour utiliser request selon son 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 demande API de style chainable est un peu déroutant (à mon humble avis), mais je crois que vous pouvez le faire fonctionner de cette façon aussi.

+0

Merci pour le suggestion, mais comme je l'ai dit dans mon message original, j'ai essayé cette solution, vous pouvez trouver le lien à la fin de mon message! – Milo

+0

Publiez votre code en utilisant 'request'. "Je l'ai essayé et ça n'a pas marché" ne suffit pas pour que nous vous aidions réellement. –

+0

Je modifiais pour ajouter mon code en utilisant la requête. merci pour votre aide :) – Milo

1

L'authentification digest dans le package de requête semble être incomplète.

Vous pouvez essayer: https://npmjs.org/package/http-digest-client, c'est une implémentation assez décent léger pour l'authentification Digest.

Si vous avez besoin d'effectuer un condensé auth POST avec un message de corps à envoyer, vous pouvez utiliser request en conjonction avec http-digest-client. Après avoir installé les deux, il suffit d'ouvrir le code http-digest-client sous node-modules et de remplacer son utilisation du paquet http par le paquet de requête api.

Questions connexes