はじめに
この記事では、標準ライブラリの使用方法の解説の一部をご紹介します。今回は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解析
ソースコードの内容を下記に示します。
'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リクエストの送信
ソースコードの編集後の内容を下記に示します。
'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リクエストを送信することができます。
受信内容の表示
ソースコードの編集後の内容を下記に示します。
'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ハッシュ値計のサンプルプログラムを作成します。