libcurl の C++ ラッパライブラリ curlpp を使って HTTP 経由でコンテンツをやり取りしようという試みです。
ネット上の何処かにあるフィードのデータを整形して Twitter へ投げるような場合にはフィードのデータを GET する場合と、Twitter へ データを POST する。2つのパターンがありますが、まずは GET 編。
いきなり答えですが、単純に URL へ GET リクエストを送るという最小限のコードはこれだけ。
cleaner はコンストラタとデストラクタで cURLpp の初期化、終了化をやってくれるもの。 あとの 3 行はほぼ見たままなのだけど、setOpt の仕方が少々変わっていてのようにでファインマクロは使わなくなっています。 libcurl でいうところの CURL_OPT_XXXX のデファインに対応するクラスが cURLpp::Options に準備されているようです。そして、そのクラスのインスタンスを setOpt に渡すことで curl ハンドラの設定行います。
でも、これだと単に標準出力にコンテンツを出力しておしまいなので、画面に出さずにメモリに入れるようにしてみたいのですが、それにはURL を設定した行の下に下の 2 行を追加すれば大丈夫です。
ちょっと分かりにくいけど、データを受け取ったら CurlHandler::writeMemoryCallback にデータを渡すようにする設定です。 libcurl でいうところの CURLOPT_WRITEFUNCTION の設定です。libcurl のドキュメント には size_t function( void *ptr, size_t size, size_t nmemb, void *stream) とか書いてるわりに、curlpp では 4 つ引数のある関数は受け取ってもらえませんでしたので、3 つで我慢しました。この関数は一回のリクエストで何回呼ばれるかは保証されていませんので、呼ばれるごとに受信したデータを後ろに繋いでいく必要があります。こんな感じで:
以上で、ざーっと curlpp で GET してレスポンスのデータをメモリに代入するところまでやってきました。最後に全体を貼り付けておきます。










コメントする