29

這是我必須做一個簡單的GET請求的代碼:基於NodeJS的HTTP客戶端:如何驗證請求?

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

但是這條道路「/受限制」,需要一個簡單的基本的HTTP認證。我如何添加憑證進行身份驗證?我在NodeJS' manual中找不到與基本http身份驗證相關的任何內容。 在此先感謝。

回答

47

您需要將授權添加到諸如使用base64編碼的標頭之類的選項。像:

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

Here是關於基本HTTP認證的一些信息。

+0

我知道它是如何工作,但我似乎無法理解怎麼用的NodeJS」 HTTP庫......在哪裏我把那base64編碼字符串,我的用戶名和密碼做呢? –

22

在新版本中,你也可以只添加AUTH參數(格式爲用戶名:密碼,沒有編碼),以你的選擇:

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

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

(注:上v0.10.3測試)

0

我建議使用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 
});