2012-03-06 80 views
2

我在POST过程中受到基本访问身份验证保护的资源时遇到问题。 下面是代码,我使用@mikeal's request发布到受基本访问授权保护的资源

request.post({ 
    uri: "http://user:[email protected]/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在这两个反应和身体。如果我删除“用户:密码”部分我正确地得到一个401 HTTP基本:访问被拒绝。

你知道是否有办法将POST JSON发布到受保护的资源,就像我的情况一样?如果没有,我相信我必须去http模块的方式,但我将它作为最终的资源,因为它更加冗长。

更新:为了尽可能简单,我已将此文件移动到新目录中,并执行了npm install request。问题消失了,我检查了byteParsed来自哪里,发现它是“强大的”,这是express所要求的,这是我在运行此测试的目录中所必需的。现在有点困惑。用base64密码和HTTP标头中添加编码字符串:

回答

2

您必须将头添加到您的要求与此规则:

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

基本上你必须编码字符串:用户名

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

我不知道是否有可能添加标题与jQuery或JavaScript。抱歉。

看吧:http://api.jquery.com/extending-ajax/#Transports

+0

谢谢您的回答;我已经更新了我的问题,因为我发现将代码移动到干净的目录“解决”了问题。我说“解决”是因为我需要在前一个文件夹中,我认为我遇到了一些不兼容问题。我正在查看你的链接,但肯定看起来有些可能。 – 2012-03-06 18:07:35

+0

谢谢!我已经按照你的建议解决了这个问题:D奇怪的是,这是我使用的库已经做的事情,我几乎从那里复制了解决方案,今晚我会研究它。再次感谢。 – 2012-03-06 18:25:00

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 
}); 
相关问题