2012-03-31 50 views
0

我有一些的node.js代碼看起來像這樣:的node.js http.get()發出請求,而不發送的主機名

Updater.prototype.poll= function(callback) { 
var options = { 
    host: api_host, 
    port: 80, 
    path: update_path, 
    method: 'GET', 
    agent: false, 
    headers: [{'accept-encoding': '*;q=1,gzip=0'}] 
}; 

console.log('Polling'); 
var req = http.get(options, function(res) { 
    //other stuff here... 
}); 

};

的問題是,在發送請求時,服務器返回400 Bad Request - Invalid Hostname。我用wireshark嗅探了TCP流,它似乎不是發送http請求的一部分,而是生成一條如下所示的行:undefined: undefined。我確定api_host變量設置正確(我甚至用硬編碼的字符串嘗試過)。我也嘗試使用hostname而不是host。有沒有一個衆所周知的理由可以這樣做?

+0

什麼版本的節點? – 2012-03-31 15:49:42

+0

另外什麼是選擇的價值? – 2012-03-31 15:51:34

回答

0

它看起來就像你可能會證實我也創建一個HTTP請求的新的風格遇到了錯誤。從我測試過的內容來看,我非常肯定它與設置http header/options中的內容類型有關。

我又回到了老樣子(即http.createClient())和工程。所以,這就是我建議

1

首先,讓我們嘗試在node.js docs頁的樣本。這對你有用嗎?如果你在這裏更換主機怎麼辦?

var options = { 
    host: 'www.google.com', 
    port: 80, 
    path: '/index.html' 
}; 

http.get(options, function(res) { 
    console.log("Got response: " + res.statusCode); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 

其次,你看過使用Request?這是一個很好的標準模塊,用於使用非常友好的語法來完成這種事情(類似於jQuery)。

+0

最後,這是一個定義標題的方式(當我將它從數組表示法'標題:[...]'改變爲對象標記'標題:{...}時,它得到了修正 – matei 2012-03-31 16:16:58