29

Đây là mã tôi phải thực hiện một yêu cầu GET đơn giản:HTTP Client dựa trên NodeJS: Cách xác thực yêu cầu?

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

Nhưng mà đường dẫn "/ hạn chế" yêu cầu xác thực HTTP cơ bản đơn giản. Làm cách nào để thêm thông tin đăng nhập để xác thực? Tôi không thể tìm thấy bất kỳ điều gì liên quan đến xác thực http cơ bản trong NodeJS' manual. Cảm ơn trước.

Trả lời

47

Bạn cần phải thêm Cấp quyền cho các tùy chọn như tiêu đề được mã hóa bằng base64. Giống như:

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

Here là một số thông tin về xác thực HTTP cơ bản.

+0

tôi biết cách thức hoạt động nhưng tôi dường như không thể hiểu được làm thế nào để làm điều đó với các thư viện http NodeJS' ... Tôi nên đặt rằng mã hóa base64 chuỗi với tên truy cập và mật khẩu của tôi? –

22

Trong phiên bản mới hơn, bạn cũng có thể chỉ cần thêm auth tham số (tên người dùng định dạng: mật khẩu, không có mã hóa) để lựa chọn của bạn:

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

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

(Chú ý: thử nghiệm trên v0.10.3)

0

Tôi đề nghị sử dụng mô-đun request cho điều đó, nó hỗ trợ các chức năng phạm vi rộng bao gồm Xác thực cơ bản 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 
}); 
Các vấn đề liên quan