2016年3月29日 星期二

使用node.js發出post

使用node.js發出post請求其實是個不太常見的用法,

因為一般用法,是使用網頁表單發出post請求向server請求資料

而使用node.js的server再去處理request

不過,總是會遇到需要使用node.js發出request的情況嘛~

首先,先使用request這個套件,網址如下

https://www.npmjs.com/package/request

官網的範例程式(少了一個分號)長這樣

var request = require('request');
request('http://www.google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body) // Show the HTML for the Google homepage.
    }
});


不過我使用時,抓回來的response有中文 為了顯示上的好看,

我使用了adobe與google開發的思源黑體 


 在這邊選擇Noto Sans CJK TC,

是Chinese Japanese Korean Traditonal Chinese的縮寫

安裝好之後,編輯.atom/styles.less

font-family: Noto Sans CJK TC; 
 font-size:16px;

但是這邊連英文與數字都會套用成思源黑體,覺得好醜,因此改成

font-family: Consolas, 'Courier New', Courier, Noto Sans CJK TC; font-size:16px;

前面的字型是atom的預設字型(atom會隨著你安裝的OS不同改變預設字型)

若是想要更進階應用的話,可以參考@font-face之unicode-range


接下來進入正題啦,直接來看程式碼

request.post({
                      url:'這裡是你的URL', 
                      qs: '包含querystring的物件',
                      encoding: null}, 
                      function (error, response, body) { 
                          if (!error && response.statusCode == 200) {
                              console.log(body); 
                          }); 
                      } 
});


執行後出現亂碼啦

原因就出在編碼的問題上

因此去下載iconv-lite

https://www.npmjs.com/package/iconv-lite

並把程式碼修改成

var str = iconv.decode(new Buffer(body), "big5");
console.log(str);

就大功告成啦