http.getとprocessオブジェクトを使って、外部のWebページをコマンドラインで取得する。
http.requestは、GET、POST、DELETE、PUT、OPTIONなど、任意の種類のHTTPリクエストを生成できる。GETリクエストについては、http.getという短縮系がある。
サーバを生成する訳ではないので、fetch.jsという名前でファイルをつくる。
fetch.js
コンテンツを取得するだけであれば、これで終わり。
ターミナル
$ hotnode fetch.js
このスクリプトを実行すると、コンソールにnodejs.orgのHTMLが出力される。
次に、エラーハンドリングを加えて、取得URLを設定できるようにしてみる。
太字追加
fetch.js
ターミナル
$ hotnode fetch.js www.google.com
このように引数にURLを指定すると、そのURLにリクエストを送信し、コンテンツをコンソールに出力する。
http.getはリクエスト先の情報を定義したオブジェクトを引数にとる。(URL文字列をとることもできる)
ここでは、urlOpts変数に情報を格納してhttp.getに渡している。www.nodejs.orgにアクセスするよう、デフォルト値をurlOpts変数に設定している。
process.argvを取得して、取得先のURLがコマンドラインで入力されたかどうか確認する。processはconsoleと同じくNodeのグローバルオブジェクトで、requireで読み込む必要がなく、どこからでも呼び出すことができる。process.argv[2]はコマンドラインの3つ目の引数。[0]と[1]にはそれぞれnodeとfetch.jsが格納されている。
process.argv[2]が存在する場合(つまりアドレスが指定されている場合)、そのアドレスをurl.parseでオブジェクトに変換する。このとき、アドレスにhttp://が付与されていない場合は自動的に付与する。このオブジェクトでurlOptsのデフォルト値を上書きする。url.parseが返すオブジェクトは、http.getがとる引数のオブジェクトと同じプロパティを持っている。
サーバからレスポンスを受け取ると、そのレスポンスに対してHTTPクライアントとして処理を行う。http.getのコールバック関数で、resオブジェクトのdataイベントを待機する。resのデータストリームを受信すると、そのchunkをコンソールに出力する。
Nodeクックブック p.44