Table of Contents
libcurl 사용법
콜백 방식으로 작동하는 라이브러리이다.
콜백 함수에서 리턴 데이타를 메모리 또는 파일로 저장할 수 있다.
콜백 함수를 지정하지 않으면 stdout 으로 리턴 데이타가 출력된다.
install
sudo apt-get install libcurl4-openssl-dev
사용법
METHOD : GET
#include <stdio.h>
#include <curl/curl.h>
int main() {
char *url_post = "https://google.com/";
char *url_get = "https://google.com/";
CURL *curl;
CURLcode res;
curl = curl_easy_init();
struct curl_slist *list = NULL;
// =========================================
// METHOD : GET
if(curl) {
// URL
curl_easy_setopt(curl, CURLOPT_URL, url_get);
// METHOD
// DEFAULT : GET
// EXECUTE
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
// callback 함수가 없으면 stdout 으로 출력된다.
}
}
METHOD : POST
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
int main() {
char *url_post = "https://google.com/";
char *url_get = "https://google.com/";
CURL *curl;
CURLcode res;
curl = curl_easy_init();
struct curl_slist *list = NULL;
curl = curl_easy_init();
// =========================================
// METHOD : POST
if(curl) {
list = NULL;
// URL
curl_easy_setopt(curl, CURLOPT_URL, url_post);
// METHOD
curl_easy_setopt(curl, CURLOPT_POST, 1L);
// HEADERS
list = curl_slist_append(list, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
// SSL
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1L);
// DATA
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data");
// EXECUTE
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
// callback 함수가 없으면 stdout 으로 출력된다.
}
}
METHOD : POST & CALLBACK
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
struct MemoryStruct {
char *memory;
size_t size;
};
size_t write_to_memory_callback(void *buffer, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *) userp;
char *ptr = (char *) realloc(mem->memory, mem->size + realsize + 1);
if(!ptr) {
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
mem->memory = ptr;
memcpy(&(mem->memory[mem->size]), buffer, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
int main() {
char *url_post = "https://google.com/";
char *url_get = "https://google.com/";
CURL *curl;
CURLcode res;
curl = curl_easy_init();
struct curl_slist *list = NULL;
// =========================================
// METHOD : POST & CALLBACK
if(curl) {
list = NULL;
struct MemoryStruct chunk;
chunk.memory = (char *) malloc(1);
chunk.size = 0;
// URL
curl_easy_setopt(curl, CURLOPT_URL, url_post);
// METHOD
curl_easy_setopt(curl, CURLOPT_POST, 1L);
// HEADERS
list = curl_slist_append(list, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
// SSL
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1L);
// DATA
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data");
// CALLBACK
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_memory_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) &chunk);
// EXECUTE
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (chunk.size > 0) {
printf("111111111 : %s", chunk.memory);
}
free(chunk.memory);
}
}
실행하기
gcc test2.c -lcurl
./a.out