Webサーバーと通信するプログラム(Curl版)
それでは、Webサーバーにフルーツの名前を送り、Webサーバーから返されたフルーツの価格を表示するWebクライアントのプログラムをCurlで記述してみましょう。通常のHTMLで作成されたWebページとの大きな違いは、CurlのプログラムならWebサーバーから返されたフルーツの価格をWebクライアント側で処理できることです。WebサーバーとWebクライアントで、クライアント/サーバーシステムを構築できるのです。
ここでは、簡単な処理ですが、Webクライアント(Curlのプログラム)で、フルーツの価格に文字列を付加して"ミカンは、400円です!"のように表示することにしましょう。エラーを表す-1が返された場合は、"その商品は取り扱っておりません!"と表示します。
Curl IDEを使って、「WebClient」というマニフェスト名で、新規に「アプレットプロジェクト」を作成してください。IDEの左側にあるツリーで「start.curl」をダブルクリックしてコードエディタを表示させたら、リスト5に示したコードを記述してください。このコードは、先ほどHTMLで記述したWebページと同様のユーザーインターフェースで、GetFruitPrice.aspを呼び出すものです。
{curl 6.0 applet} {curl-file-attributes character-encoding = "shift-jis"} {applet manifest = "manifest.mcurl", {compiler-directives careful? = true} } {value let target-url:Url = {url "http://localhost/GetFruitPrice.asp"} let fruit-name:TextField = {TextField width = 2in} let char-encoding:CharEncoding = {get-character-encoding-by-name "shift-jis"} || SUBMITボタンを定義する let submit-button:CommandButton = {CommandButton label = "Webサーバーに送信", || SUBMITボタンのクリックイベント {on Action do let stream:#TextInputStream = null {try let http-file:HttpFile = {target-url.instantiate-File} asa HttpFile let http-form-data:HttpFormData = {HttpFormData default-character-encoding = char-encoding, mime-type = HttpFormData.urlencoded-mime-type } || Webサーバーに送る文字列を用意する {http-form-data.append {new HttpFormStringParam, "FruitName", fruit-name.value asa String} } || ストリームを開き、Webサーバーへデータを送る set stream = {http-file.http-read-open request-data = http-form-data, request-method = HttpRequestMethod.post } catch e:HttpException do {popup-message "エラーです!"} } || ストリームがヌルでなければデータを受け取っている {if stream != null then || 受け取ったデータを処理します let data:StringBuf = {stream.read-one-string} {if data == "-1" then {popup-message "その商品は取り扱っておりません!"} else {popup-message fruit-name.value & "は、" & data & "円です!"} } || ストリームを閉じる {stream.close} } } } || HBoxは、画面の項目を水平方向に並べて表示します {HBox "フルーツの名前", fruit-name, submit-button } }
リスト5のポイントを説明しましょう。Urlクラスをデータ型としたオブジェクトtarget-urlに、サーバー側のスクリプトのURLを指定します。変数char-encodingは、文字列のエンコードを示すものです。ここでは、Windows環境で動作させるので、シフトJISを指定しています。
Webサーバーとの通信でも、ストリームという概念が使われます。ストリームを開き、データを読み書きし、ストリームを閉じるという手順は、この記事の前半で紹介したテキストファイルをアクセスするプログラムの内容に似ています。プログラムの実行結果の例を図5に示します。
Developers Summit 2009
最後に、皆さまにお知らせがあります。2009年2月12日(木)~13日(金)に、東京の目黒雅叙園でDevelopers Summit 2009が開催されます。「デブサミ」の愛称で知られるデベロッパー向けのイベントです。株式会社カールの講演セッションでは、VB 6.0で開発された業務システムをCurlに置き換えるツールなどが紹介されるそうです。Webで事前登録すれば入場無料ですので、ぜひご参加ください。