7

APIドキュメンテーションのNode.JSでコードを書く必要がありますが、最後の数日間、スタック(もちろんStackを含む)上で見つけられたすべてのソリューションが成功しました...Node.JSでHTTPダイジェスト認証を要求する方法?

My API HTTPダイジェスト認証を使用し、それが問題だ、私は接続することができた、というのは大したことはなかったが、毎回私は同じリターンを得た:

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

あなたは認証なしで以下の私の基本コードを表示することができます!私は私がしたすべての試行の後に何ができるのか分からないので:

私の最後の試みの
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

まず試し:

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

2回目の試行:

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

ここにあなたのexamplがありますeはAPIとしてrequestを使用するように修正されました。

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はちょっと混乱していますが(IMHO)、その方法でもうまくいくと思います。

+0

ありがとうございましたが、私の元の投稿で言ったように、私はこのソリューションを試しました。あなたは私の投稿の最後にリンクを見つけることができます! – Milo

+0

'request'を使ってコードを投稿してください。 "私はそれを試して、それは動作しませんでした"実際にあなたを助けるために十分ではありません。 –

+0

リクエストを使用して自分のコードを追加して編集していました。ありがとう、助けてくれてありがとう。 – Milo

1

リクエストパッケージのダイジェスト認証が不完全なようです。

あなたは試してみることができます:https://npmjs.org/package/http-digest-clientダイジェスト認証のためのかなり軽量な実装です。

bodyメッセージを送信するダイジェスト認証POSTを実行する必要がある場合は、http-digest-clientと一緒にrequestを使用できます。ノードモジュールの下にhttp-digest-clientコードを開くだけで、httpパッケージの使用を要求パッケージapiに置き換えます。

関連する問題