NodeJS`request`返回“需要身份验证”。在HTTPS GET上

时间:2015-02-10 22:00:31

标签: node.js rest https request

对于Web应用程序,我试图从需要基本身份验证的RESTful服务中提取一些数据。

到目前为止,我已获得以下代码:

var req = request({
    auth: 'Basic aGVsbG8gd29ybGQ=', //base64 encoded credentials "hello world"
    url: url.resolve("https://rest.someurl.com", "/url/to/data.xml"),
    method: "GET",
    jar: true
}, function(err, res, body) {

  if(err) return util.err(err);

  console.log(body);

});

当我通过Postman服务提取此URL并设置了身份验证标头时,它会正确返回数据。此外,当我删除auth选项并直接在URL中输入用户名/密码时,我也会恢复正常的数据。我无法获得任何数据的唯一情况是上面的代码。

上面的代码有什么问题,或者我应该添加什么才能使其正常工作?

2 个答案:

答案 0 :(得分:1)

只需在URL中提供明文用户名和密码,尝试让请求处理基本授权标头。请求将为您格式化。您也很可能不需要jar选项,默认方法为GET,因此无需指定。{/ p>

var username = "your-username";
var password = "your-password";
var req = request({
    url: "https://" username + ":" + password + "@rest.someurl.com/url/to/data.xml")
}, function(err, res, body) {

  if(err) return util.err(err);

  console.log(body);

});

答案 1 :(得分:0)

共享稍大范围的代码我发现我需要将request()调用移到回调内部我必须正确传播用户名和密码。

var getData = exports.getData = function() {

  var credentials = "";
  getCredentials(function(creds) {
    credentials = {
      'user': creds.username,
      'pass': creds.password
    }
    var req = request({
        auth: credentials,
        url: url.resolve("https://rest.someurl.com", "/url/to/data.xml")
    }, function(err, res, body) {

      if(err) return util.err(err);

      console.log(body);

    });
  });
}