libcurlの使い方メモ

こちらはメジャーなライブラリlibcurlのメモ。
と言ってもほとんどのサンプルはhttp://curl.haxx.se/libcurl/c/example.htmlにあるのでメモる程のものでは無いかも。

「HTTP-GETで取得したファイルを保存する(wget)」的なサンプルは無かったのでそれの動作に近いサンプルを作ってみました。

include 
include 

int main(int argc, char *argv[])
{
	CURL *curl;
	CURLcode res;

	curl = curl_easy_init(); //ハンドラの初期化
	curl_easy_setopt(curl, CURLOPT_URL, tmp); //URLの登録

	FILE *fp = fopen(f_name, "w"); //取得したデータを書き込むファイル、"f_name"はファイル名
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite); //BODYを書き込む関数ポインタを登録
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //↑で登録した関数が読み取るファイルポインタ
	res = curl_easy_perform(curl); //いままで登録した情報で色々実行

	long http_code = 0;
	curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); //ステータスコードの取得
	curl_easy_cleanup(curl); //ハンドラのクリーンアップ
	fclose(fp);

	return 0;
}

↑の例ではファイルに出力すれば良いだけなのでfwrite標準関数を関数ポインタとして渡しましたが、(void*, size_t, size_t, void*(例ではFILE*だったけど実はvoid*が正統派))型のmywriteとか作れば、mywriteを実行させるようにすることも可能です。

FTPにもSSL-HTTPにも対応できるし、使い方を理解すればかなり応用の効くライブラリだと思います。

ちなみにリンクはlibcurl.soをリンク「-lcurl」すればOK。
wgetをexecとかで実行している人は、libcurlも候補に挙げてみては如何でしょうか。