我正在编写一个nodejs应用程序,该应用程序从URL下载图像并保存。我正在使用request
模块下载图像:
var request = require('request');
var download = function (uri, filename, callback) {
request.head(uri, function (err, res, body) {
//do some error handling here....
}
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
});
};
download('172.30.0.0/img.jpg', 'downim.jpg', function () {
console.log("image downloaded");
}
当我下载未经身份验证的可用映像时,此方法有效。但是,现在我需要下载使用摘要身份验证使用用户名和密码保护的图像。到目前为止,我使用模块request-digest
提出了这一点:
var digest = require('request-digest')('root', 'pass');
digest.request({
host: '172.30.0.0',
path: '/',
port: 80,
method: 'GET',
headers: {}
}, function (err, res, body) {
if (err) {
console.log("digest err: " + err);
} else {
//call function to download the image:
download('172.30.0.0/img.jpg', 'downim.jpg', function () {
console.log("image downloaded");
}
}
});
此方法背后的想法是首先获取url的根,这将授权我使用所提供的usrname / passwd组合,一旦获得授权,便开始下载映像。但是我的授权失败了,Error: bad request, answer is empty
。关于这里可能出什么问题的任何想法?还是更好,是否有更好的方法仅通过一个请求就可以通过Digest Auth下载图像?
答案 0 :(得分:0)
好的,它可以工作了……唯一需要做的就是将请求更改为GET并向其中添加.auth('root', 'pass', false)
。无需使用request-digest
模块
var download = function (uri, filename, callback) {
request.get(uri, function (err, res, body) {
if (err) {
console.log(err);
}
if (res.statusCode === 401) {
console.log("not authorized");
}
request(uri).auth('root', 'pass', false).pipe(fs.createWriteStream(filename)).on('close', callback);
}).auth('root', 'pass', false);
};