본문 바로가기
개발 업무(코딩)-개발자였을때 썼던..

CURL 헤드 따로 주는 법

by 주용사 2023. 1. 8.
728x90

struct curl_slist *list = NULL 부분을 주목하자!!!!

struct MemoryStruct {
        char *memory;
        size_t size;
};

static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
        size_t realsize = size * nmemb;
        struct MemoryStruct *mem = (struct MemoryStruct *)userp;

        mem->memory = realloc(mem->memory, mem->size + realsize + 1);
        if (mem->memory == NULL) {
                /* out of memory! */
                printf("not enough memory (realloc returned NULL)\n");
                exit(EXIT_FAILURE);
        }

        memcpy(&(mem->memory[mem->size]), contents, realsize);
        mem->size += realsize;
        mem->memory[mem->size] = 0;

        return realsize;
}
int KOSCOM_CURL_TO_DB(int market, int mode, MYSQL *pConn)
{

        CURL *curl_handle;
        CURLcode res;
        struct MemoryStruct chunk;
        struct curl_slist *list = NULL;
        chunk.memory = malloc(1);  /* will be grown as needed by the realloc above */
        chunk.size = 0;    /* no data at this point */

        sprintf(url, "https://sandbox-apigw.koscom.co.kr/v2/market/stocks/kospi/%s/master", isusrtcd);

        curl_global_init(CURL_GLOBAL_ALL);

        curl_handle = curl_easy_init();

        curl_easy_setopt(curl_handle, CURLOPT_URL, url);
        char temp[512];

        curl_easy_setopt(curl_handle, CURLOPT_HEADER, 0L);

        curl_easy_setopt(curl_handle, CURLOPT_CUSTOMREQUEST, "GET");

        curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);

        curl_easy_setopt(curl_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); // 속도문제를 해결해준다. IPV4만 사용

        // Koscom Api Key
        sprintf (temp, "apikey: %s", "????????");
        list = curl_slist_append(list, temp);

        curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list);

        curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 5);

        curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);

        curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
        /* some servers don't like requests that are made without a user-agent
         *          *      field, so we provide one */
        //curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");

        res = curl_easy_perform(curl_handle);

        /* check for errors */
        if(res != CURLE_OK) {
                fprintf(stderr, "[%d] curl_easy_perform() failed: %s\n[%s]", __LINE__, curl_easy_strerror(res), url);
        }

        /* curl list free */
        curl_slist_free_all(list);
        /* cleanup curl stuff */
        curl_easy_cleanup(curl_handle);

        if(chunk.memory)
                free(chunk.memory);

        /* we're done with libcurl, so clean it up */
        curl_global_cleanup();
}
728x90