スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【C/C++】C言語からCurlライブラリを使ってみる

通信モジュールとして有名(?)なCurlもジュールをC言語から使ってみます。

今回はYahoo!JAPANのTOPページに対してhttpリクエストを送り、標準出力にhtmlを出力するといったことをやってみようかと思います。

#include<stdio.h>
#include<string.h>
#include<curl/curl.h>

#define MAX_BUF 640000
char wr_buf[MAX_BUF+1];
int  wr_index;

size_t write_data( void *buffer, size_t size, size_t nmemb, void *userp )
{
  int segsize = size * nmemb;

  if ( wr_index + segsize > MAX_BUF ) {
    *(int *)userp = 1;
    return 0;
  }

  memcpy( (void *)&wr_buf[wr_index], buffer, (size_t)segsize );

  wr_index += segsize;

  wr_buf[wr_index] = 0;  return segsize;
}

int main(void){
    CURL *handle;
    CURLcode ret;
    int wr_error;

    wr_error = 0;
    wr_index = 0;

    handle = curl_easy_init();

    curl_easy_setopt(handle, CURLOPT_URL, "http://www.yahoo.co.jp"); //Yahoo!JAPANのTOPページを指定
    curl_easy_setopt(handle, CURLOPT_WRITEDATA, (void *)&wr_error);
    curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data);

    ret = curl_easy_perform(handle);

    if(ret == 0)
    {
        printf("%s", wr_buf);
    }

    curl_easy_cleanup(handle);

    return 0;
}

どうやらCURLOPT_WRITEFUNCTIONに指定する関数はcurl.hを読んでみると

/* Function that will be called to store the output (instead of fwrite). The
 * parameters will use fwrite() syntax, make sure to follow them. */
CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),

fwrite形式の関数と同じ形式でしていしてください的なしばりがあるようです

あとはcurl_easy_*系のAPIが提供されているようなのでそちらを使用すると簡単に使うことができそうですね。
上記プログラムをcurl_test.cと言う名前で保存したとします。

コンパイルは
gcc -c curl_test.c

リンクは
gcc curl_test.o /usr/lib/libcurl.so -o curl_test

とします。ただし、/usr/lib/libcurl.soは環境によって読み変えてください。

最後に./curl_testと実行すればYahoo!JAPANのトップページのhtmlが出力されるはずです。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:C/C++  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。