【Node.js】httpクライアント(GETリクエスト)

  • このエントリーをはてなブックマークに追加

httpクライアント(GETリクエスト)とは、Node.jsでサーバーのURLにGETリクエストを送る。
ブラウザでサーバーにアクセスする場合はGETリクエストをサーバーに送っている。
このGETリクエストをNode.jsで行う。

HTTP通信において、GETリクエストのデータをchunk分割して送信するという概念自体はありえる。
しかし、通常の使用ではGETリクエストにはリクエストボディが含まれないため、チャンク分割は必要ない。
Internet ExplorerのURLの最大長は2083文字なので、だいたい、この2083文字の中に収まるクエリ文字列の長さだと正常に動くはず。

環境
Windows10(64bit)
nvm(Node Version Manager)を使用する。
nvmはnodeとnpmのバージョンの切り替えができる。
node.jsはアップデートが頻繁に行われるため、バージョン管理ツールを使うと都合が良いことが多い。
「特定のプロジェクトに必要なNode.jsのバージョンを簡単にインストールして使用することができる。」や「プロジェクト毎にNode.jsのバージョンの切り替えが簡単になる。」等のメリットがある。
nvm 1.1.10
node v18.15.0
npm 9.5.0



Node.jsでサーバーのURLにGETリクエストを送るコード「get.js」を次に示す。


(function() {

    // Node.jsのhttpモジュールをrequireを使ってインポートして、定数httpに格納する。
    const http = require("http");
    const url = "http://localhost:3000?name=John&pass=12345";
    const options = {
        method: "GET",
        headers: {
            'User-Agent': 'Manual submission via get method from Node.js', // ユーザーエージェントを設定
        }
    };

    //リクエストを送信する。
    // httpオブジェクトからrequestメソッドを実行する。
    // requestメソッドは、引数としてリクエストを処理するコールバック関数を受け取る。
    // レスポンスを処理するためのコールバック関数を指定する。
    // コールバック関数は、レスポンスオブジェクト(res)を受け取りレスポンスの処理を行う。
    const req = http.request(url, options, (res) => {
    
        console.log(`statusCode: ${res.statusCode}`);// ステータスコードを表示する。
        console.log(`content-type: ${res.headers['content-type']}`); // レスポンスのコンテンツタイプを表示する。
        
        // res.pipe(process.stdout)は、レスポンスストリームを標準出力ストリームにパイプ接続する。
        // pipeメソッドは、Readableストリームからデータを読み取り、そのデータをWritableストリームに書き込む。
        // process.stdoutはNode.jsの標準出力ストリームを表しており、res.pipe(process.stdout) によって、レスポンスのデータが読み取られて標準出力に表示される。
        // つまり、HTTP POSTリクエストを送信し、レスポンスを取得した後、そのレスポンスのデータを標準出力に表示するという動作になる。
        // レスポンスオブジェクト(res)は、http.IncomingMessageオブジェクトのインスタンスである。

        res.pipe(process.stdout);

        let responseData = '';

        // data受信イベントの発生時に断片データ(chunk)を取得する。
        res.on('data', (chunk) => {
           responseData += chunk;
        });

        // 受信完了(end)イベント発生時
        // 「end」イベントは、レスポンスのデータの読み取りが完了した場合に発生する。
        res.on('end', function() {
            console.log(responseData);
            console.log("レスポンスの読み取りが完了しました");
            // ここで必要な後処理を実行
        });

    });

    // リクエストの送信中にエラーが発生した場合に「error」イベントは発生する。
    req.on('error', function(err) {
        console.error(err.message);
    });

    // 「end」メソッドはリクエストの送信を完了させるためのメソッドである。
    // 「end」メソッドは実際にリクエストをサーバーに送信する。
    req.end();

})();

get.jsを実行する。Node.jsで立ち上げたサーバー「http://localhost:3000?name=John&pass=12345」に「GETリクエスト」を送信する。


c:\node\server>node get.js
statusCode: 200
content-type: text/plain;charset=utf-8
method:GET
req.url:/?name=John&pass=12345
name = John
pass = 12345
Hello World! GET
method:GET
req.url:/?name=John&pass=12345
name = John
pass = 12345
Hello World! GET

レスポンスの読み取りが完了しました

c:\node\server>

サーバーが立ち上がっていない場合はエラーになる。


c:\node\server>node get.js
connect ECONNREFUSED ::1:3000

c:\node\server>
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*