簡単な例

まずは目をつぶって使ってみる

libghttp のソース tarball に含まれるドキュメント、doc/ghttp.html には、 極めて単純な使用例が示されています。示されていることだけを記述したもの が、simple_http.cです。

FreeBSD 2.2.7 + gcc 2.7.2.1 の環境では、次のようなコマンドラインでコン パイルできます。

$ gcc -I/path/to/include -o simple_http simple_http.c -L/path/to/lib -lghttp -R/path/to/lib

また、RedHat Linux 7.3 + gcc 2.96 の環境では、次のようなコマンドライン でコンパイルできました。

$ gcc -I/path/to/include -o simple_http simple_http.c -L/path/to/lib -lghttp -Wl,--rpath -Wl,/path/to/lib

コンパイルができたら、こんな感じで実行してみます。

$ ./simple_http > output.txt

このアプリケーションは、libghttp をリンクして実行できることを確認する 目的以外の何の役にも立ちません。ソース中で設定した固定の URI(仮に http://localhost:8080/ としました) で示される資源を HTTP で 取得し、取得した内容を stdout に出力します。また、そのときサーバから返 されたステータスコードを stderr に出力します。サーバが動いていなかった り、指定の資源が存在しなかったり、認証エラーが発生したりしても何も対処 しません。

処理の流れ

ソース(simple_http.c)を読むなり、 doc/ghttp.html を読むなりしてもらえればわかることですが、どうやらこれ が基本的な流れらしいので、念のため、処理の流れをおさらいしておきます。

0. ghttp.h の include

gHTTP を利用するにあたり、必要となる型や定数等の定義、関数の プロトタイプ宣言を含む ghttp.h を include します。

1. request オブジェクトの宣言と初期化

gHTTP では、HTTP のやりとりに関わる情報を、 ghttp_request 型のオブジェクトに格 納します。処理に先立ち、このオブジェクトの準備と初期化を ghttp_request_new() により行います。

2. request 情報の設定

要求する URI の設定は、 ghttp_set_uri() で、また、必要に応 じて、リクエストヘッダを ghttp_set_header() で設定します。 gHTTP は、 RFC2068 に規定される HTTP/1.1 (厳密には、現在有効な HTTP/1.1 の規格は RFC2616) に基づくクライアント構築用のライブラリです。HTTP/1.1 では、クラ イアントからのリクエストの処理終了後、コネクションを切断しないの が未指定時の動作となります。サーバは、クライアント側から明示的に コネクションを切断するか、タイムアウトになるまでは、コネクション を維持しようとします。このアプリケーションでは、1つの URI しか要 求しませんので、サーバの資源を浪費しないためにも、さっさとコネク ションを切ります。これを設定するのが、Connection: ヘッダに対する、 "close" 指定です。 ghttp_set_header() に対し、ヘッダ の名称とその値を引数として与え、設定します。gHTTP では、このよう に、http_hdr_ で始まる変数に、ヘッ ダ名称の文字列が事前定義されていますので、それを利用します。

3. リクエスト実行の準備

理由までは調べていませんが、doc/ghttp.html には、実際にリクエ ストを実行する前に、 ghttp_prepare() を呼ぶように書かれ ています。主体性に欠けますが、これに従って呼んでおきます。

4. リクエスト実行

ghttp_process() を呼ぶと、実際 にリクエストが実行されます。

5. 資源の取り出し

リクエスト実行により取得した資源は、 ghttp_get_body() により取り出すこ とができます。取り出すのに資源の長さが必要となりますが、これは、 ghttp_get_body_len() でわかります。

6. ステータスコードの取り出し

念のため、サーバから返されたステータスコードも確認します。ス テータスコードは、 ghttp_status_code() で得られます。 200 が返ってくれば、要求通りに資源が返されたことになります。

7. request オブジェクトの破棄

最後に、 ghttp_request_destroy() によりオブ ジェクトを破棄し、お掃除して終了です。


Copyright © 2003 杉浦 伊織
このページに関するお問い合わせは秘 書を通してください。
最終更新: Tue Mar 25 20:24:00 2003