スポンサーリンク

VC++でlibcurlを使う(httpの場合)

httpsの場合はopenssl設定が必要になるのでまた後。httpプロトコルのみであればビルドもプログラムもかなり簡単。しかしhttpsのアドレス入れるとUnsupported protocolとか言われる。

ビルド

公式からcurl-8.0.1.zipをダウンロードし展開する。

https://curl.se/download.html

展開し、VC++のソリューションが入っているディレクトリを探す。

curl-8.0.1\projects\README.md を読むと、以下のバージョン対応表があってわかりやすい。

- VC10 (Visual Studio 2010 Version 10.0)
- VC11 (Visual Studio 2012 Version 11.0)
- VC12 (Visual Studio 2013 Version 12.0)
- VC14 (Visual Studio 2015 Version 14.0)
- VC14.10 (Visual Studio 2017 Version 15.0)
- VC14.30 (Visual Studio 2022 Version 17.0)

今回使ったのはVC++2019なので、VC14.10を開き、ソリューションをアップデートすることにする。以下を開く。

curl-8.0.1\projects\Windows\VC14.10\curl-all.sln

 

ソリューション構成を LIB Releaseに設定。

libcurlをビルド。

curl-8.0.1\build\Win64\VC14.10\LIB Release\libcurl.lib が出来上がる。

curl-8.0.1
├─build\
│  └─Win64\
│      └─VC14.10\
│          └─LIB Release\
│             └─lib\       ...  libcurl.lib の出力先
├─CMake\
├─docs\
├─include\
│  └─curl\
├─lib\
├─m4\
├─packages\
├─plan9\
├─projects\
│  └─Windows\
│      ├─VC10\
│      ├─VC11\
│      ├─VC12\
│      ├─VC14\
│      ├─VC14.10\         ... ここに.slnが入っている
│      └─VC14.30\
├─scripts\
├─src\
├─tests\
└─winbuild\

サンプルコード

#include <iostream>

#define CURL_STATICLIB 
#include<curl/curl.h>

// OS標準
#pragma comment(lib, "CRYPT32.LIB")
#pragma comment(lib, "wldap32.lib" )
#pragma comment(lib, "Ws2_32.lib")


// 作成したlibcurl
#pragma comment(lib,"libcurl.lib")

// 参考
// https://gist.github.com/alghanmi/c5d7b761b2c9ab199157


static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}
      
int main(void)
{
    CURL* curl;
    CURLcode res;
    std::string readBuffer;

    // CURL の初期化
    curl = curl_easy_init();
    if (curl) {

        // 読みたいURLを指定
        curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com/");


        // データを受け取るためのコールバック関数を指定
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);

        // データを受け取るためのコールバック関数「WriteCallback」に渡す、データの格納先
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);

        // 実際にHTTPリクエストを送信。
        // 実際にWriteCallbackが呼ばれるのはここ。
        res = curl_easy_perform(curl);

        if (res != CURLE_OK) {
            std::cerr << "curl_easy_perform failed: " << curl_easy_strerror(res) << std::endl;
            curl_easy_cleanup(curl);
            return 1;
        }


        // CURL の終了処理
        curl_easy_cleanup(curl);

        // 結果の表示
        std::cout << readBuffer << std::endl;
    }
    return 0;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: