对于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中输入用户名/密码时,我也会恢复正常的数据。我无法获得任何数据的唯一情况是上面的代码。
上面的代码有什么问题,或者我应该添加什么才能使其正常工作?
答案 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);
});
});
}