def yasuharu519(self):

日々の妄想

C++用のRESTクライアント restclient-cpp を試してみる

CやC++ででhttpリクエストを送りたい場合、libcurlが 使われる場合が多くありますが、 libcurlはC言語で書かれているため、普段C言語を触ってない自分としては ちょっと扱いづらいです。

そのため、C++で http リクエストを送信したい場合に、簡単に使えるライブラリを 探してみました。 見つかったのは以下のようなところ。

今回は、この中でも一番扱いが楽そうな mrtazz/restclient-cpp を使ってみました。

インストール

mrtazz/restclient-cpp では、ビルドに autoconfが使われているため、その作法に従ってビルドします。

$ git clone https://github.com/mrtazz/restclient-cpp
$ cd restclient-cpp
$ ./autogen.sh
$ ./configure
$ make
$ make install

と実行することで、/usr/local/include, /usr/local/libにそれぞれヘッダファイルと、 ライブラリがインストールされます。 インストール先を変更する場合はconfigure時に--prefixをつけることで変更できるはず。

簡単なテスト

簡単に google のTOPページをGETしてくるプログラムを書いてみました。

ビルド時は、ライブラリを指定することを忘れずに。 また、C++11でコンパイルしています。

$ g++ -std=c++11 -lrestclient-cpp rest-client-test.cpp
$ ./a.out

で、実行結果はこんな感じ。

# Code
302

# Header
Alternate-Protocol:80:quic,p=0.02
Cache-Control:private
Content-Length:261
Content-Type:text/html; charset=UTF-8
Date:Thu, 08 Jan 2015 01:03:23 GMT
HTTP/1.1 302 Found:present
Location:http://www.google.co.jp/?gfe_rd=cr&ei=W9etVOm-DoaK8AWj0YCoBA
Server:GFE/2.0

# Body
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.jp/?gfe_rd=cr&amp;ei=W9etVOm-DoaK8AWj0YCoBA">here</A>.
</BODY></HTML>

リダイレクトされている場合、自動でリダイレクト先をみるようにはなっていないので、 そこはハンドリングしないといけないみたい。

ただ、ソースを見ると、libcurlの薄いラッパーなだけなので、 もっと複雑なことをしたければ、libcurl使ったほうがいいかもしれませんね。

今度はこれを使ってクローラでも作ってみようかな〜