HTTPモジュールはHTTPサーバを生成するだけでなく、HTTPクライアントを生成することもできる。
http.getとprocessオブジェクトを使って、外部のWebページをコマンドラインで取得する。
http.requestは、GET、POST、DELETE、PUT、OPTIONなど、任意の種類のHTTPリクエストを生成できる。GETリクエストについては、http.getという短縮系がある。
サーバを生成する訳ではないので、fetch.jsという名前でファイルをつくる。
fetch.js
http.getとprocessオブジェクトを使って、外部のWebページをコマンドラインで取得する。
http.requestは、GET、POST、DELETE、PUT、OPTIONなど、任意の種類のHTTPリクエストを生成できる。GETリクエストについては、http.getという短縮系がある。
サーバを生成する訳ではないので、fetch.jsという名前でファイルをつくる。
fetch.js
var http = require('http');
var urlOpts = {host: 'www.nodejs.org', path: '/', port: '80'};
http.get(urlOpts, function(res){
res.on('data', function(chunk){
console.log(chunk.toString());
});
});
コンテンツを取得するだけであれば、これで終わり。
ターミナル
$ hotnode fetch.js
このスクリプトを実行すると、コンソールにnodejs.orgのHTMLが出力される。
次に、エラーハンドリングを加えて、取得URLを設定できるようにしてみる。
太字追加
fetch.js
コンテンツを取得するだけであれば、これで終わり。
ターミナル
$ hotnode fetch.js
このスクリプトを実行すると、コンソールにnodejs.orgのHTMLが出力される。
次に、エラーハンドリングを加えて、取得URLを設定できるようにしてみる。
太字追加
fetch.js
var http = require('http');
var url = require('url');
var urlOpts = {host: 'www.nodejs.org', path: '/', port: '80'};
if(process.argv[2]){
if(!process.argv[2].matcåh('http://')){
process.argv[2] = 'http://' + process.argv[2];
}
urlOpts = url.parse(process.argv[2]);
}
http.get(urlOpts, function(res){
console.log(urlOpts);
res.on('data', function(chunk){
console.log(chunk.toString());
}).on('error',function(e){
console.log('エラー:' + e.message);
});
});
ターミナル
$ 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
ターミナル
$ 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