7

Tôi phải viết một số mã với Node.JS cho tài liệu API, nhưng tôi đã thử vài ngày qua tất cả các giải pháp tôi có thể tìm thấy trên web (bao gồm cả Stack của khóa học) mà không cần ...Làm cách nào để yêu cầu auth HTTP Digest với Node.JS?

API của tôi sử dụng HTTP Digest Auth và đó là vấn đề, tôi đã có thể kết nối, đó là không phải là một vấn đề lớn nhưng mỗi lần tôi có sự trở lại giống nhau:

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

Bạn có thể hiển thị mã cơ sở của tôi dưới đây mà không auth! Bởi vì tôi không biết những gì tôi có thể làm sau khi tất cả các thử tôi đã làm:

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

Một trong những thử cuối cùng của tôi là sử dụng mô-đun này https://npmjs.org/package/request nhưng ông không làm việc quá như mọi Tôi có 401!

Để biết thêm thông tin, tôi có thể kết nối và nhận thông tin tôi cần từ API của mình với Ruby, Python, php và Java, vì vậy tôi chắc chắn API của tôi hoạt động tốt và thông tin tôi chuyển là chính xác. Tôi sử dụng ổn định cuối cùng của Node v0.10.11!

Nếu ai đó có thể giúp tôi hoặc có giải pháp cập nhật, tôi sẽ rất vui.

EDIT: tôi sẽ bổ sung thêm một số chi tiết về thử nghiệm của tôi với các module Mickael/request

thử đầu tiên:

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

Hãy thử thứ hai:

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

nhưng sự trở lại vẫn như cũ 401

Trả lời

6

Đây là bài kiểm tra của bạn e được sửa để sử dụng request theo API của nó.

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 kiểu chuỗi có thể yêu cầu hơi khó hiểu (IMHO), nhưng tôi tin bạn cũng có thể làm theo cách đó.

+0

Cảm ơn bạn đã đề xuất nhưng như tôi đã nói trong bài đăng gốc của mình, tôi đã thử giải pháp này, bạn có thể tìm thấy liên kết ở cuối bài đăng của tôi! – Milo

+0

Đăng mã của bạn bằng cách sử dụng 'yêu cầu'. "Tôi đã thử nó và nó không hoạt động" là không đủ để chúng tôi thực sự giúp bạn. –

+0

Tôi đã chỉnh sửa để thêm mã bằng cách sử dụng yêu cầu. cảm ơn sự giúp đỡ của bạn :) – Milo

1

Xác thực thông báo trong gói yêu cầu dường như không đầy đủ.

Bạn có thể thử: https://npmjs.org/package/http-digest-client, ứng dụng thực hiện nhẹ khá tốt cho xác thực thông báo.

Nếu bạn cần thực hiện POST xác thực thông báo bằng tin nhắn nội dung được gửi, bạn có thể sử dụng yêu cầu cùng với http-digest-client. Sau khi cài đặt cả hai chỉ cần mở mã http-digest-client dưới nút-mô-đun và thay thế việc sử dụng gói http với gói api yêu cầu.

Các vấn đề liên quan