7

API 문서의 Node.JS 코드를 작성해야하지만 지난 며칠 동안 성공적으로 스택을 포함하여 웹에서 찾을 수있는 모든 솔루션을 시도했습니다 ...Node.JS를 사용하여 HTTP Digest 인증을 요청하는 방법?

내 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의 마지막 안정을 사용합니다!

누군가가 나를 도울 수 있거나 최신의 해결책을 가지고 있다면 기쁠 것입니다.

편집 : 나는 모듈과 내 테스트에 대한 몇 가지 세부 사항을 추가합니다 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) 
    } 
}); 

두 번째 시도 :

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을 사용해 볼 수 있습니다.

본문 메시지를 보내고 다이제스트 인증 POST를해야하는 경우 http-digest-client와 함께 request를 사용할 수 있습니다. 설치가 끝나면 노드 모듈 아래 http-digest-client 코드를 열고 http 패키지 사용을 요청 패키지 api로 바꿉니다.