7

Мне нужно написать код с Node.JS для документации по API, но я пробовал в последние несколько дней все решения, которые я мог найти в Интернете (включая, конечно, Stack) без успеха ...Как сделать запрос HTTP Digest с помощью Node.JS?

Мой API использовать HTTP Digest Auth и это проблема, я был в состоянии соединиться, это не было большим делом, но каждый раз, когда я получил то же возвращение:

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

Вы можете показать свой базовый код ниже без 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); 
    }); 
}); 

Один из моей последней попытки, чтобы использовать этот модуль https://npmjs.org/package/request, но он не работает тоже, как каждый раз я получил 401!

Для получения дополнительной информации я смог подключиться и получить необходимую мне информацию из моего API с Ruby, Python, php и Java, поэтому я уверен, что мой API работает хорошо, и информация, которую я передаю, верна. Я использую последнюю конюшню узла v0.10.11!

Если кто-то может мне помочь или у меня есть решение, я буду рад.

EDIT: Добавлю некоторые подробности о моем тесте с модулем Mickael/request

Первый Try:

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

Второй Try:

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

но возвращение все тот же 401

ответ

6

Вот ваш пример e исправлено для использования 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) 
    } 
}); 

Запрос стиль API в цепочке немного запутанным (ИМХО), но я полагаю, вы можете заставить его работать именно так, как хорошо.

+0

Благодарим вас за предложение, но, как я сказал в своем оригинальном посте, я пробовал это решение, вы можете найти ссылку в конце моего сообщения! – Milo

+0

Отправьте свой код с помощью 'request'. «Я попробовал, и это не сработало» недостаточно для того, чтобы мы действительно помогли вам. –

+0

Я редактировал для добавления моего кода с помощью запроса. спасибо за вашу помощь :) – Milo

1

Ошибка в пакете запроса представляется неполной.

Вы можете опробовать: https://npmjs.org/package/http-digest-client, его довольно приличную легкую реализацию для аутентификации дайджеста.

Если вам необходимо выполнить авторизацию POST с сообщением тела, которое нужно отправить, вы можете использовать запрос в сочетании с http-digest-client. После установки как только открыть http-digest-client code в узловых модулях и заменить его использование пакета http пакетом api запроса.