최근 C++ 어플리케이션으로 구글 API를 사용할일이 있어서 방법을 찾던 중 libcurl을 알게 되었습니다. 훨씬 더 편한 Rest SDK(casablanca)가 있기는 하지만 이러저러한 환경상 사용할수 없는 상태라 libcurl을 이용하게 됐는데, 생각 보다 좋더군요. 지원하는 프로토콜도 많고, ssl도 지원하고 있어서 써먹을 곳이 많을것 같습니다.


#include <curl/curl.h>
#include <json/json.h>

CURL *curl;
CURLcode res;

std::string strTargetURL;
std::string strResourceJSON;

struct curl_slist *headerlist = nullptr;
headerlist = curl_slist_append(headerlist, "Content-Type: application/json");

strTargetURL = "https://www.example.com/bind";
strResourceJSON = "{\"snippet\": {\"title\": \"this is title\", \"scheduledStartTime\": \"2017-05-15\"},\"status\": {\"privacyStatus\": \"private\"}}";

curl_global_init(CURL_GLOBAL_ALL);

curl = curl_easy_init();
if (curl)
{
	curl_easy_setopt(curl, CURLOPT_URL, strTargetURL.c_str());
	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

	curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);

	curl_easy_setopt(curl, CURLOPT_POST, 1L);
	curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strResourceJSON.c_str());

	// 결과 기록
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);

	res = curl_easy_perform(curl);

	curl_easy_cleanup(curl);
	curl_slist_free_all(headerlist);

	if (res != CURLE_OK)
	{
		fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
		return false;
	}
	
	std::cout << "------------Result" << std::endl;
	std::cout << chunk.memory << std::endl;

	return true;
}
return false;

참조: https://curl.haxx.se/libcurl/

+ Recent posts