ikemonn's blog

技術ネタをちょこちょこと

【Node.js】HTTPクライアントの概要

3つのクラス

HTTPクライアントを実装する際には次の3つのクラスについて理解することが必要

  • http.ClientRequest

    • HTTPクライアントからHTTPサーバへ送信リクエストヘッダ及びボディを扱うクラス
  • http.ClientResponse

    • HTTPクライアントがHTTPサーバから受信したレスポンスヘッダ及びボディを扱うクラス
  • http.Agent HTTPクライアントとHTTPサーバ間のsocket接続を管理し、複数のリクエストオブジェクトをsocketに割り当てる役割を担うクラス

サンプルコード

var http = require('http');
var options ={
        host : 'localhost',
        port : 1337,
        path : '/',
        method : 'POST'
};

var req = http.request(options, function(res) {
    var data = '';
    res.on('data', function(chunk) {
        data += chunk;
    });

    res.on('end', function() {
        console.log('data is ' + data);
    });
});

var msg = 'Hello from HTTP Client Request';

req.setHeader('Content-Length', Buffer.byteLength(msg));
req.write(msg);
req.end();

サンプルコードの解説

  • http.request()でhttp.ClientRequestクラスのオブジェクトreqを作成する

    • 引数にresponseイベントのリスナを指定する(無名関数をサンプルコードでは渡している)
    • リスナでは、サーバからのレスポンスを受けるhttp.ClientResponseクラスのオブジェクトのresが引数として渡る
  • そのボディデータをdataイベントで逐次受信して変数に格納し、endイベントでデータを出力する

  • 生成したreqオブジェクトに対してはPOSTするサイズを表すContent-Lengthヘッダを追加してデータを書き込む
  • req.end()を行うことでglobalAgentの送信管理下による処理が行われる

参考

サーバサイドJavaScript Node.js入門 (アスキー書籍)

サーバサイドJavaScript Node.js入門 (アスキー書籍)