下载需要摘要身份验证的映像

时间:2019-12-17 14:40:30

标签: node.js http

我正在编写一个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下载图像?

1 个答案:

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