POST到基本访问授权保护资源

时间:2012-03-06 17:37:28

标签: node.js post basic-authentication

在POST到受基本访问身份验证保护的资源时遇到问题。 这是代码,我正在使用@mikeal's request

request.post({
  uri: "http://user:password@mysite.com/resource",
  json: {
    "id": "1",
    "par1": "a",
    "par2": "b"
  }
}, function (error, response, body) {
  console.log(error);
  console.log(response);
  console.log(body);
});

我的错误{ [Error: Parse Error] bytesParsed: 0 }和响应和正文中都有undefined。如果我删除“user:password”部分,我会正确获得401 HTTP Basic:拒绝访问。

您知道是否有办法将JSON POST到受保护的资源,就像我的情况一样?如果没有,我相信我将不得不采用http模块的方式,但我将其作为最终资源,因为它更加详细。

更新:为了让这个尽可能简单,我已将此文件移到新目录中并执行了npm install request。问题消失了,我检查了byteParsed来自哪里,发现它是“强大的”,这是快递所需要的,我在运行此测试的目录中有。现在有点困惑。

2 个答案:

答案 0 :(得分:4)

我是这样做的:

var options = {                 
  method: 'POST',             
  uri: 'http://your.url.com/',
  form: {                  
    field1: 'somevalue',               
    field2: 666.66  
    },                       
  headers: {               
    'Authorization': 'Basic ' + new Buffer("username:password").toString('base64')                  
  }
};                                         
request(options, function(error, response, body) {  
  // do stuff
});

答案 1 :(得分:2)

您必须使用以下规则为您的请求添加标头:

http://en.wikipedia.org/wiki/Basic_access_authentication

基本上你必须在base64中对字符串:username:password进行编码,并在http头中添加编码字符串:

授权:基本“Base64(用户名:密码)”

我不知道是否可以使用jquery或javascript添加标头。遗憾。

请看这里:http://api.jquery.com/extending-ajax/#Transports