2012-03-06 78 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 
}); 
相關問題