[英]How to do request HTTP Digest auth with Node.JS?
我必須用 Node.JS 編寫一些代碼來編寫 API 文檔,但是最近幾天我嘗試了所有可以在網絡上找到的解決方案(當然包括 Stack),但都沒有成功......
我的 API 使用 HTTP Digest Auth,這就是問題所在,我能夠連接,這沒什么大不了的,但每次我都得到相同的回報:
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 !
有關更多信息,我能夠使用 Ruby、Python、php 和 Java 從我的 API 中連接並獲取我需要的信息,因此我確信我的 API 運行良好並且我傳遞的信息是正確的。 我使用的是 Node 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
這是您的示例,已更正為根據其 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 有點令人困惑(恕我直言),但我相信您也可以讓它以這種方式工作。
請求包中的摘要身份驗證似乎不完整。
你可以試試: https : //npmjs.org/package/http-digest-client ,它是一個相當不錯的用於摘要認證的輕量級實現。
如果您需要使用要發送的正文消息執行摘要身份驗證 POST,您可以將請求與 http-digest-client 結合使用。 安裝后,只需打開 node-modules 下的 http-digest-client 代碼,並將其對 http 包的使用替換為請求包 api。
嘗試使用urllib它將使用簡單且令人厭惡的身份驗證。
const httpClient = require('urllib');
const url = 'https://site.domain.com/xmlapi/xmlapi';
const options = {
method: 'POST',
rejectUnauthorized: false,
// auth: "username:password" use it if you want simple auth
digestAuth: "username:password",
content: "Hello world. Data can be json or xml.",
headers: {
//'Content-Type': 'application/xml' use it if payload is xml
//'Content-Type': 'application/json' use it if payload is json
'Content-Type': 'application/text'
}
};
const responseHandler = (err, data, res) => {
if (err) {
console.log(err);
}
console.log(res.statusCode);
console.log(res.headers);
console.log(data.toString('utf8'));
}
httpClient.request(url, options, responseHandler);
你的樣品是工作
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.