[Node.js] 學習筆記:使用 http 模組取得網頁內容

[Node.js] 學習筆記:使用 http 模組取得網頁內容

Learnyounode 的第七課,是用 http 模組來送出 GET 請求,

來取得一個網頁的內容~

 

要送出 GET 請求,用的是 http.get() 函式,

給它一個 URL,再加上一個 callback 來處理 response。

同時註冊一個 “error” callback,這樣如果無法連上時,可以作些處理:

http = require("http");
// Send http request
var req = http.get(process.argv[2], function(response) {
// Deal with response
});
// Register "error" callback for the http request
req.on("error", function(err) {
console.log(err);
});

 

上面的程式其實有個疑問啦…

http.get() 先被呼叫了,傳回一個 req 物件,

而我們在拿到這物件之後,才去呼叫 req.on() 設定 error callback…

這樣子的話,究章這個 http 連線會先連出去呢?還是在作完 req.on() 後才連出去呢?

假設連線在呼叫時,在底層就同時連出去的話,遇到的 error 就有可能不會呼叫到 error callback 了…

現在我還不太熟 Node.js,不過看起來會先執行到 req.on()…

 

另外一個小問題時,這邊的 URL 必須是類似 http:// 開頭的,

像是 http://www.google.com,如果是 www.google.com,

就會得到 ECONNREFUSED 這個錯誤~

 

接下來,在連線成功的狀況下,就可以藉由 http.get() 的第二個參數 callback,

得到 response 物件,只要設定一下 encoding 和 “data” callback,

就能取得資料,下面就是最後的完整程式:

http = require("http");
// Send http request
var req = http.get(process.argv[2], function(response) {
// Set encoding so that response would be strings
response.setEncoding("utf-8");
// Register "data" callback
response.on("data", function(data) {
console.log(data);
});
});
// Register "error" callback for the http request
req.on("error", function(err) {
console.log(err);
});

 

 

 

(本頁面已被瀏覽過 301 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料