スポンサーリンク
httpsの場合はopenssl設定が必要になるのでまた後。httpプロトコルのみであればビルドもプログラムもかなり簡単。しかしhttpsのアドレス入れるとUnsupported protocolとか言われる。
公式からcurl-8.0.1.zipをダウンロードし展開する。
展開し、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を開き、ソリューションをアップデートすることにする。以下を開く。
ソリューション構成を 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; }