microcurlは、標準C言語とソケットAPIのみを使用して実装された、最小限の機能を持つコマンドラインHTTP GETクライアントです。cURLの基本的な動作を学習する目的で作成されました。
指定されたURLにHTTP GETリクエストを送信し、サーバーからのレスポンスを標準出力に表示します。
graph TD
A[URL文字列] --> B[URL解析<br/>host, port, pathを取得];
B --> C[名前解決<br/>host → IPアドレス];
C --> D[ソケット作成 & 接続];
D --> E[HTTP GETリクエスト生成 & 送信];
E --> F[HTTPレスポンス受信];
F --> G[レスポンスを標準出力に表示];
- 外部ライブラリに依存せず、基本的なCの関数群で実装
- HTTP/1.0 GETリクエストに対応
- URLをホスト名、ポート、パスに分解して処理
valgrindでのチェックを想定した、クリーンなリソース管理
- Cコンパイラ (例:
gcc,clang) make
リポジトリをクローンし、make コマンドを実行してください。
git clone [email protected]:shonakam/microcurl.git
cd microcurl
makeこれにより、プロジェクトのルートディレクトリに microcurl という実行ファイルが生成されます。
実行ファイルに引数として取得したいURLを渡します。
./microcurl <URL>実行例:
# example.comのコンテンツを取得
./microcurl http://example.com
# ローカルで起動しているサーバーにリクエスト
./microcurl http://localhost:8080valgrind を使ってメモリリークや不正なメモリアクセスがないかを確認できます。
make valgrind.
├── Makefile
├── inc/
│ ├── microcurl.h # メインの構造体やプロトタイプ宣言
│ └── util.h # ユーティリティ関数のプロトタイプ宣言
└── src/
├── microcurl.c # main関数、全体的な処理の流れ
├── parse_url.c # URLのパース処理
├── resolve_host.c # ホスト名の名前解決
├── socket_connect.c # ソケット接続処理
├── send_request.c # HTTPリクエストの作成と送信
├── recv_response.c # HTTPレスポンスの受信
└── util/ # 自作の標準ライブラリ風関数群
├── reb_memcpy.c
├── reb_memset.c
├── reb_putendl_fd.c
├── reb_strdup.c
├── reb_strlen.c
└── reb_strncmp.c
inc/: プロジェクト全体のヘッダーファイルを格納します。src/: 機能ごとに分割されたソースコードを格納します。src/util/:libcの標準関数を再実装したユーティリティ関数群です。
- shonakam