=================================================================== Varmint WWW Client -- A Very Simple Web Client Copyright (c) 2001 Mikio Hirabayashi. All rights reserved. =================================================================== ☆はじめに このディレクトリには、非常にシンプルなWebクライアントプログラムが納 められています。このクライアントは、HTTP1.0のユーザエージェントとし て、URLによって指定されたサーバに、指定されたリソースを要求するメッ セージを送り、そのデータを取得します。 このプログラムは、コマンドライン引数として与えられたURLで指定される リソースをWebサーバからダウンロードしてローカルマシンに保存します。 このようなGETメソッドだけでなく、HEAD、POST、PUT、DELETEの各メソッ ドも用いることができます。Webサービスのリクエストに必要なHTTPヘッダ は自動的に生成されます。 このプログラムの機能は、GETメソッドに限って言えばwget等の便利なWeb クライアントには全く及びません。しかし、それ以外のメソッドにも対応 し、さらにHTTPを直接制御できるという特徴があります。HTTPを理解する 人ならば、cpやrm等の一般的なユーティリティプログラムのような手軽さ でWebサービスを利用できるようになるでしょう。あるいはCGIスクリプト やWebアプリケーションの機能テストや負荷テストにも使えるでしょう。 ☆動作環境とインストール このプログラムはLinuxシステム上で開発および動作確認をしています。 SunOS等の他のUNIX環境に移植するには、ソースコードを書き換えるなど、 多少の作業が必要となるでしょう。ここでは GNU Make と GCC を用いたイ ンストール手順を説明しますが、知識のある方なら別のツールを用いても よいでしょう。 まず、シェル上で make を実行すると、プログラムがコンパイルされ、実行ファイル varmint と urlenc と randstr が作成されます。ここでエラーが出た場合はあなたの システムに必要な開発ツールやヘッダファイルやライブラリがインストー ルされていない可能性を考えてください。 次に、root ユーザになってから、シェル上で make install を実行すると、/usr/local/bin に実行ファイルがインストールされます。 root ユーザになれない人や、別のディレクトリにインストールしたい場合 は、単に cp コマンド等でファイルをコピーや移動しても構いません。 ☆使い方 この文章で説明されない詳細な点については、ソースファイル冒頭のコメ ントを参照するとわかると思います。 最も簡単な使い方は、実行ファイル varmint にダウンロードしたいリソー スのURLを引数として渡して起動することです。ダウンロードしたデータは URLの末尾に表現されるファイル名か、ディレクトリを要求した場合は index.html という名前のファイルに保存されます。その際、リクエストと レスポンスのヘッダは標準エラー出力に出力されます。 例えば、http://www.mikio.gov/profile.html というURLで示されるリソー をダウンロードしたい場合は、 varmint http://www.mikio.gov/profile.html のように実行してください。あるいは、 varmint -get http://www.mikio.gov/profile.html としても同じことです。 上記の例はHTTPのGETメソッドでリソースを要求し、データを取得していま す。一方、大きさ等のリソースの属性を知りたいが、中身のデータは必要 ないという場合は、HTTPのHEADメソッドを用います。 varmint -head http://www.mikio.gov/profile.html などとすると、リクエストおよびレスポンスのヘッダを表示しますが、リ ソースのダウンロードと保存は行いません。 ほとんどのWebのリソースは、HTTPのGETメソッドを用いてダウンロードで きますが、CGIスクリプト等のゲートウェイプログラムを用いて動的に生成 されるデータをダウンロードする場合は、POSTメソッドを用いることがあ ります。POSTメソッドでは、リクエストにエンティティボディをつけてデ ータを送信します。例えば、ファイル mykey の中身をエンティティボディ にする場合は、 varmint -u -post http://www.mikio.gov/search.cgi mykey などとします。ここで -u オプションをつけているのは、エンティティボ ディがいわゆる「URLエンコード」を施されていることを期待するゲートウ ェイプログラムに対して、その旨を伝えるためです。 いちいちエンティティボディをファイルに作成するのが面倒な場合は、引 数の文字列をエンティティボディに指定することもできます。例えば、 key=apple&lang=ja をエンティティボディにしたい場合は、 varmint -u -posts http://www.mikio.gov/search.cgi \ "key=apple&lang=ja" などとします。多くのCGIスクリプトは、データがURLエンコードされてい ることを期待しています。そこで、引数の文字列をURLエンコードして出力 するプログラムである urlenc を使うと便利です。CGIスクリプトに対して はGETでもPOSTでもリクエストを出せますが、シェルのコマンド置換と組み 合わせれば urlenc はその両方で利用できます。例えば以下のような使い 方になります。 varmint -get \ "http://www.mikio.gov/search.cgi?key=`urlenc 映画`" varmint -u -posts \ "http://www.mikio.gov/search.cgi" "key=`urlenc 映画`" 負荷テストで varmint を用いる場合には、毎回ランダムな文字列を用いて リクエストを出したい場合があるでしょう。その場合は randstr を用いる と便利です。例えば以下の例では、英字の小文字からランダムに選んだ5 文字からなる文字列を検索キーにしています。 varmint -posts \ "http://www.mikio.gov/search.cgi" "key=`randstr -c 5 -sa`" HTTPのPOSTメソッドは、任意のデータをWebサーバにアップロードする機能 を実現します。サーバ上のURLで指定した場所に、送りこんだデータがファ イルとして保存されます。varmint は、POSTメソッドと同じようにファイ ルの中身を送ることもできますし、引数の文字列を送ることもできます。 例えば、以下のような使い方になります。 varmint -put http://www.mikio.gov/lovesong.mp3 lovesong.mp3 varmint -puts http://www.mikio.gov/greeting.txt hello HTTPのDELETEメソッドは、サーバ上のリソースを削除する機能を実現しま す。URLで指定したリソースをサーバから削除します。例えば、以下のよう な使い方になります。 varmint -del http://www.mikio.gov/profile.html 各行にURLが記述されたファイルを用いて、そのURLを全てダウンロードす ることもできます。例えば mybank というファイルを用いる場合は以下の ようにします。 varmint -bank mybank 一般化すると、varmint でのリクエストを行うための書式は以下のように なります。これらの指定は複数並べて順番に実行させることもできます。 URL GETメソッドでURLのリソースをダウンロードして 保存する -get URL GETメソッドでURLのリソースをダウンロードして 保存する -head URL HEADメソッドでURLのリソースの状態を表示する -post URL filename POSTメソッドでURLのリソースにファイルを送信 し、レスポンスをダウンロードして保存する -posts URL string POSTメソッドでURLのリソースに引数の文字列を 送信し、レスポンスをダウンロードして保存する -put URL filename PUTメソッドでファイルを送信し、URLの場所に保 存する -puts URL string PUTメソッドで引数の文字列を送信し、URLの場所 に保存する -del URL DELETEメソッドでURLのリソースを削除する -bank filename ファイルの各行のURLをGETメソッドでダウンロー ドして保存する デフォルトの設定では、varmint はリクエストに失敗した場合はデータの ダウンロードと保存は行いません。また、ダウンロードの途中でネットワ ークが切断された場合は自動的にリクエストをやりなおし、リソースの移 動が報告された場合は、その移動先に対して自動的にリクエストをやり直 します。 varmint が送るリクエストのヘッダには、デフォルトで以下のものが付加 されます。また、POSTとPUTメソッドでは、エンティティボディのサイズを Content-Length ヘッダで送信します。 User-Agent: Varmint/バージョン Host: サーバのホスト名:ポート番号 Accept: */* 以下のオプションを使って varmint の挙動を設定することができます。 -proxy hostname プロクシのホスト名を指定する -pport port プロクシのポート番号を指定(デフォルトは 80 ) -auth id:pass 基本認証のユーザ名とパスワードを指定 -o filename 取得したデータを繋げてファイルに保存する ファイル名に - を指定した場合は標準出力に出力 -h filename リクエストに付加するヘッダのリストをファイルか ら得る -a header リクエストに付加するヘッダを引数で指定する -u URLエンコードを示すヘッダを付加する -b デフォルトで付加されるヘッダを抑制する -r レスポンスヘッダもエンティティと一緒に保存する -c ダウンロードが中断した時に再試行する -j リソースの移動先を追跡しない -f エラーメッセージもダウンロードして保存する 例えば、プロクシに proxy.mikio.gov の 8080 番ポートを使って、認証に ユーザ名 mikio でパスワード pass を用いて接続し、ページ参照元を検出 する掲示板CGIスクリプト http://www.bbs.gov/bbs.cgi にPOSTメソッドで ファイル data の内容に基づいてを書き込みを行い、レスポンスのデータ を result というファイルに保存する場合、以下のように書きます。 varmint -proxy proxy.mikio.gov -pport 8080 -auth mikio:pass \ -a "Referer: http://www.bbs.gov/bbs.cgi" -u -o result \ -post http://www.bbs.gov/bbs.cgi data ☆最後に このプログラムは平林幹雄 が作成しました。バグレポ ートや改良案など歓迎します。また、GPL2に基づいて配布するので自由に 使用、変更、再配布を行って構いません。 Version: 1.0.3 Last Modified: Mon, 27 Aug 2001 16:56:52 +0900 ===================================================================