web-dev-qa-db-ja.com

NodeJSに基づくHTTPクライアント:リクエストを認証する方法

これは、単純なGETリクエストを作成するために必要なコードです。

var options = {
    Host: 'localhost',
    port: 8000,
    path: '/restricted'
};

request = http.get(options, function(res){
    var body = "";
    res.on('data', function(data) {
        body += data;
    });
    res.on('end', function() {
        console.log(body);
    })
    res.on('error', function(e) {
        console.log("Got error: " + e.message);
    });
});

しかし、そのパス "/ restricted"には単純な基本的なHTTP認証が必要です。認証に資格情報を追加するにはどうすればよいですか? NodeJSのマニュアル で、基本的なhttp認証に関連するものを見つけることができませんでした。前もって感謝します。

28

認証は、base64でエンコードされたヘッダーなどのオプションに追加する必要があります。お気に入り:

var options = {
    Host: 'localhost',
    port: 8000,
    path: '/restricted',
    headers: {
     'Authorization': 'Basic ' + new Buffer(uname + ':' + pword).toString('base64')
   }         
};
50

新しいバージョンでは、オプションにauthパラメータ(username:password、エンコーディングなしの形式)をオプションに追加することもできます。

var options = {
    Host: 'localhost',
    port: 8000,
    path: '/restricted',
    auth: username + ':' + password
};

request = http.get(options, function(res){
    //...
});

(注:v0.10.3でテスト済み)

22
tomekK

そのために request モジュールを使用することをお勧めします。これは、HTTP基本認証を含む幅広い機能をサポートします。

var username = 'username',
    password = 'password',
    url = 'http://' + username + ':' + password + '@some.server.com';

request({url: url}, function (error, response, body) {
   // Do more stuff with 'body' here
});
0
gevorg