node.js模組之http模組

來源:互聯網
上載者:User

標籤:style   http   color   os   io   使用   ar   檔案   資料   

如果你想向遠程伺服器發起HTTP 串連,Node 也是很好的選擇。Node 在許多情景下都很適合使用,如使用Web service,串連到文檔資料庫,或是抓取網頁。你可以使用同樣的http 模組來發起HTTP 要求,但應該使用http.ClientRequest 類。該類有兩個Factory 方法:一個通用的方法和一個便捷的方法。

var http = require(‘http‘);
var opts = {
host: ‘www.google.com‘

port: 80,
path: ‘/‘,
method: ‘GET‘
};
var req = http.request(opts, function(res) {
console.log(res);
res.on(‘data‘, function(data) {
console.log(data);
});
});
req.end();

 

(method)是可選項,如果沒有指定,預設會設定為GET。最後需要注意的一點是,需要結束(end())該請求。因為這是一個GET 請求,所以我們並不會往伺服器發送任何資料。但對於其他的HTTP 方法,比如PUT 或POST,你可能需要發送資料。request 會等待end() 方法調用後,才初始化HTTP請求,因為在那之前,它不確定我們是否還會發送資料。

 

GET 是很常見的HTTP 使用方式,因此提供了一個專門的Factory 方法來更方便地使用
它,如例4-10 所示。

var http = require(‘http‘);
var opts = {
host: ‘www.google.com‘
port: 80,
path: ‘/‘,
};

var req = http.get(opts, function(res) {
console.log(res);
res.on(‘data‘, function(data) {
console.log(data);
});
});

這個例子的http.get() 和之前的例子做了一樣的事情,但更加明確。我們把method屬性從設定物件中去掉了,還把request.end() 也移除了,因為這些都已經隱含說明了。如果運行了這兩個例子,你得到的結果將是Buffer 對象的裸資料。本章後續會介紹到,Buffer 是Node 特殊定義的類,用來支援任意位元據的儲存。雖然你也可以直接使用這些內容,但通常要指定編碼方式,如UTF-8(一種Unicode 字元的編碼格式),這可以通過response.setEncoding() 方法來指定.

> var http = require(‘http‘);
> var req = http.get({host:‘www.google.com‘, port:80, path:‘/‘},
function(res) {
... console.log(res);
... res.on(‘data‘, function(c) { console.log(c); });
... });
> <Buffer 3c 21 64 6f 63 74 79 70
...
65 2e 73 74>
<Buffer 61 72 74 54 69
...
69 70 74 3e>
>
> var req = http.get({host:‘www.google.com‘, port:80, path:‘/‘},
function(res) {
... res.setEncoding(‘utf8‘);
... res.on(‘data‘, function(c) { console.log(c); });
... });
> <!doctype html><html><head><meta http-equiv="content-type
...
load.t.prt=(f=(new Date).getTime());
})();
</script>

 

發送HTTP POST 和PUT 資料
不是所有的HTTP 要求都是用GET 方法的,你還需要調用POST、PUT 和其他HTTP
方法,它們會改變對方的資料。這和發送GET 請求的功能一樣,只不過你還需要往
上發送一些資料(例4-12)。

var options = {
host: ‘www.example.com‘,
port: 80,
path: ‘/submit‘,
method: ‘POST‘
};
var req = http.request(options, function(res) {
res.setEncoding(‘utf8‘);
res.on(‘data‘, function (chunk) {
console.log(‘BODY: ‘ + chunk);
});
});
req.write("my data");
req.write("more of my data");
req.end();
這個例子和例4-10 很相似, 但增加了http.ClientRequest.write() 方法。可以用這個方法發送上行資料流。之前解釋過, 它要求你顯式地調用http.ClientRequest.end() 方法來表示資料發送完畢。每當調用ClientRequest.write() 時,資料會馬上上傳(不會被緩衝),但伺服器在ClientRequest.end()調用之前是不會響應你的資料請求的。你可以把一個流(Stream)的data 事件和ClientRequest.write() 綁定在一起,這樣就能把資料以流的形式發送給伺服器了。比如當需要把硬碟上的一個檔案通過HTTP 發送給遠程伺服器時,這會是個好主意。

 

node.js模組之http模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.