728x90
코스콤 koscom api 를 사용하여 주식데이터를 내려받아 fwrite를 했더니 한글이 깨졌다. 이것을 해결하기 위해서 memorystruct을 도입했다.
(사실 locale.h로 시도하다가 삽질)
/usr/share/doc/libcurl-devel-7.29.0/getinmemory.c
에 있는 샘플코드를 이용하였고 추가한부분은 url과 FILE 관련 부분이다.
#include "changjo.h"
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 main(void)
{
CURL *curl_handle;
struct MemoryStruct chunk;
chunk.memory = malloc(1); /* will be grown as needed by the realloc above */
chunk.size = 0; /* no data at this point */
const char* url = "https://sandbox-apigw.koscom.co.kr/v2/market/stocks/kospi/lists?apikey=넣으시오" ;
curl_global_init(CURL_GLOBAL_ALL);
/* init the curl session */
curl_handle = curl_easy_init();
/* specify URL to get */
curl_easy_setopt(curl_handle, CURLOPT_URL, url);
/* send all data to this function */
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
/* we pass our 'chunk' struct to the callback function */
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");
/* get it! */
curl_easy_perform(curl_handle);
FILE *fp = fopen("test.txt", "w");
fwrite(chunk.memory, chunk.size, 1, fp);
fclose (fp);
/* cleanup curl stuff */
curl_easy_cleanup(curl_handle);
/*
** Now, our chunk.memory points to a memory block that is chunk.size
** bytes big and contains the remote file.
**
** Do something nice with it!
**
** You should be aware of the fact that at this point we might have an
** allocated data block, and nothing has yet deallocated that data. So when
** you're done with it, you should free() it as a nice application.
**/
printf("%lu bytes retrieved\n", (long)chunk.size);
if(chunk.memory)
free(chunk.memory);
/* we're done with libcurl, so clean it up */
curl_global_cleanup();
return 0;
}
728x90
'개발 업무(코딩)-개발자였을때 썼던..' 카테고리의 다른 글
c-json lib 설치 및 makefile (0) | 2023.01.08 |
---|---|
코스콤 koscom api 관련 문서와 링크 (0) | 2023.01.08 |
#include<curl/curl.h> 를 못 찾을 때 (0) | 2023.01.08 |
c(서버)와 java(클라이언트) socket 통신 간단 예제 (0) | 2023.01.08 |
자바(java)와 spring 설치 가이드 링크(링크 순서대로 깔면됩니다) (0) | 2023.01.08 |