带有标头和身份验证的 npm 请求

Posted

技术标签:

【中文标题】带有标头和身份验证的 npm 请求【英文标题】:npm request with headers and auth 【发布时间】:2015-07-20 03:51:26 【问题描述】:

我正在尝试使用“请求”npm 访问 API。此 API 需要标头“内容类型”和基本身份验证。这是我到目前为止所做的。

var request = require('request');
var options = 
  url: 'https://XXX/index.php?/api/V2/get_case/2',
  headers: 
    'content-type': 'application/json'
  ,

;
request.get(options, function(error, response, body)
console.log(body);


).auth("dummyemail@abc.com","password",false);

使用 Node 执行此操作时,我收到一条错误消息,提示用户名和密码无效。我已经使用 CURL 和下面的命令验证了相同的 API、身份验证和标头,它给出了预期的 HTTP 响应。

curl -X GET -H "content-type: application/json" -u dummyemail@abc.com:password "https://XXX/index.php?/api/V2/get_case/2"

请建议使用身份验证和标头对请求进行编码的正确方法。


这是我的更新代码

var auth = new Buffer("dummy@gmail.com" + ':' + "password").toString('base64');
     var req = 
                    host: 'https://URL',
                    path: 'index.php?/api/v2/get_case/2',
                    method: 'GET',
                    headers: 
                        Authorization: 'Basic ' + auth,
                        'Content-Type': 'application/json'
                              
                ;
    request(req,callback);
    function callback(error, response, body) 
      console.log(body);
    

我在控制台中看到“未定义”。你能帮帮我吗?

【问题讨论】:

【参考方案1】:
request(url, 
  method: "POST",
  auth: 
    user: this.user,
    pass: this.pass
  
, function (error, response, body) 
    if (!error && response.statusCode == 200) 
      console.log('body:', body);
     else 
      console.log('error', error, response && response.statusCode);
    
);

【讨论】:

【参考方案2】:

这对我来说是这样的

 var auth = new Buffer(user + ':' + pass).toString('base64');
 var req = 
     host: 'https://XXX/index.php?/api/V2/get_case/2',
     path: path,
     method: 'GET',
     headers: 
         Authorization: 'Basic ' + auth,
         'Content-Type': 'application/json'
     
 ;

【讨论】:

感谢您的回答。这是我对您的建议所做的尝试。 @Praveen Kumar:在我看来,Katerina 的回答完全正确,应该被接受为答案

以上是关于带有标头和身份验证的 npm 请求的主要内容,如果未能解决你的问题,请参考以下文章

Invoke-RestMethod:发送到标头时找不到请求的身份验证数据

带有反应的 Kerberos 身份验证

为啥我的 REST 服务 .NET 客户端会在没有身份验证标头的情况下发送每个请求,然后使用身份验证标头重试?

HTTP 请求未经客户端身份验证方案“协商”的授权。从服务器收到的身份验证标头是“NTLM”

带有标头的基本身份验证 - Javascript XMLHttpRequest

有没有办法将 Authorize 属性与没有身份验证标头的请求一起使用?