- 오픈소스로 제공되는 프로그램에서 내가 필요한 데이터만 뽑아내서 python flask web server로 전송 하려고함.
- 오픈소스 프로그램이 C언어다.
- C를 능숙하게 다루는 편이 아님.
- C 프로그램에서 생성되는 데이터를 python web server(flask)로 전송하고 web server에서 데이터를 가공하고 싶음.
- C 프로그램에서 web server로 post 하는 방법을 찾아봤음.
- curl/curl.h 를 알게됨.
- linux 커맨드에서 CURL 과 curl/curl.h 정보를 구분하기 위해 curl/curl.h는 libcurl로 말하는듯
참고 사이트 :
관련 포스트 :
http-post.c 코드 |
- 실제 사용할 C 프로그램에 적용전 테스트 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; /* In windows, this will init the winsock stuff */ curl_global_init(CURL_GLOBAL_ALL); // 이 옵션은 thread 메모리 공유에 안전하지 않다. 나는 주석처리함 /* get a curl handle */ curl = curl_easy_init(); struct curl_slist *list = NULL; if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "XXX.XXX.XXX.XXX:8008/curlc"); //webserver ip 주소와 포트번호, flask 대상 router list = curl_slist_append(list, "Content-Type: application/json"); // content-type 정의 내용 list에 저장 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list); // content-type 설정 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L); // 값을 false 하면 에러가 떠서 공식 문서 참고함 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1L); // 값을 false 하면 에러가 떠서 공식 문서 참고함 curl_easy_setopt(curl, CURLOPT_POST, 1L); //POST option curl_easy_setopt(curl, CURLOPT_POSTFIELDS,"data"); //string의 data라는 내용을 전송 할것이다 /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); // curl 실행 res는 curl 실행후 응답내용이 curl_slist_free_all(list); // CURLOPT_HTTPHEADER 와 세트 /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); // curl_easy_init 과 세트 } curl_global_cleanup(); // curl_global_init 과 세트 return 0; } } | cs |
Compile |
- 컴파일 커맨드 :
$ gcc -o http-post http-post.c -lcurl
- makefile : cflags, LIBS 옵션 추가
앞에 어떤 조건이 있든 -lcurl만 추가 (CFLAGS가 아니라 다른 이름으로 쓸 수 있다)