Node.js

Node.js 実践講座 〜基礎編〜 その3

More than 1 year has passed since last update.

はじめに

この記事では、標準ライブラリの使用方法の解説の一部をご紹介します。今回はurlとhttpによるHTTPリクエスト送信のサンプルプログラムを作成します。

ワークスペースの作成

下記コマンドでプログラムを格納するディレクトリを新たに作成します。

mkdir workspace/js/basic/02-standard-library
mkdir workspace/js/basic/02-standard-library/02-url-and-http
touch workspace/js/basic/02-standard-library/02-url-and-http/index.js

cd workspace/js/basic/02-standard-library/02-url-and-http

または、

mkdir -p workspace/js/basic/02-standard-library/02-url-and-http
touch workspace/js/basic/02-standard-library/02-url-and-http/index.js

cd workspace/js/basic/02-standard-library/02-url-and-http

url.parseによるURL解析

ソースコードの内容を下記に示します。

index.js(ver.1)
'use strict';

var url = require('url')
var http = require('http')

if (require.main === module) {
  main({ argv: process.argv })
}

function main(options) {
  var argv = options.argv
  var href = argv[2]
  var target = url.parse(href)

  console.log(href)
  console.log(target)
}

下記コマンドを下記に示します。

node index.js http://google.com/

実行結果の例を下記に示します。

http://google.com/
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'google.com',
  port: null,
  hostname: 'google.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/',
  path: '/',
  href: 'http://google.com/' }

url.parse関数は文字列として与えられるURLを解析し、その結果を返します。

HTTPリクエストの送信

ソースコードの編集後の内容を下記に示します。

index.js(ver.2)
'use strict';

var url = require('url')
var http = require('http')

if (require.main === module) {
  main({ argv: process.argv })
}

function main(options) {
  var argv = options.argv
  var href = argv[2]
  var target = url.parse(href)

  var req = http.request(target, function (res) {
    console.log('success!')
  })

  req.end()
}

実行コマンドは同じです。

node index.js http://google.com/

予期される実行結果を下記に示します。

success!

http.request関数は第1引数として与えられるURLに対してHTTPリクエストを作成します。第2引数として与えられるコールバック関数はレスポンス受信時に呼び出されます。このコールバック関数の第1引数にはhttp.IncomingMessageオブジェクトが与えられます。

http.requestは戻り値としてhttp.ClientRequestオブジェクトを返します。このRequestオブジェクトのendメソッドを呼び出すことでHTTPリクエストを送信することができます。

受信内容の表示

ソースコードの編集後の内容を下記に示します。

index.js(ver.3)
'use strict';

var url = require('url')
var http = require('http')

if (require.main === module) {
  main({ argv: process.argv })
}

function main(options) {
  var argv = options.argv
  var href = argv[2]
  var target = url.parse(href)

  var req = http.request(target, function (res) {
    res.on('data', function (data) {
      console.log('data', data.toString())
    })

    res.on('end', function () {
      console.log('end')
    })
  })

  req.end()
}

実行コマンドは同じです。

node index.js http://google.com/

予期される実行結果を下記に示します。

data <html> ...
end

http.IncomingMessageオブジェクトはEventEmitterを継承しているので、onメソッドでイベントリスナーを登録することができます。dataイベントはHTTPレスポンスボディ受信時に発行され、第1引数として受信内容がBuffer型で与えられます。endイベントはHTTPレスポンスボディ受信完了時に発行されます。

おわりに

次回は、cryptoによるSHA-256ハッシュ値計のサンプルプログラムを作成します。