본문 바로가기
C, C++

C++로 Rest api 요청하기

by lms0806 2023. 12. 15.
728x90
반응형

 Python이나 JAVA로만 rest api 요청을 해보다가 C/C++로 할일이 생겨서 하다가 있던 일을 써보고자 합니다.

 

"Rest api 요청 + C계열로 해야한다"라는 생각하자마자 든 생각 - curl로 해보자.
라이브러리를 다운 후

#include<curl/curl.h>

이라는 헤더를 통해 진행이 가능합니다.

 

여기서 문제는 CMakeLists.txt에 세팅을 해줘야 한다는 문제점이 있었습니다.

CPP 프로젝트를 처음 진행해보다보니, 처음해보는 것들 투성이였습니다.

 

1. 검색을 통해 진행해보자

- curl 라이브러리를 다운 후, stackoverflow의 여러 내용들을 통해 알아보면서 세팅을 하고 find_package()를 진행하였습니다.

결론 : 이해할 수 없는 에러 발생

 

2. ChatGPT에게 물어보자

- 이해할 수 없는 에러를 해결하기 위해 GPT를 활용해보자.

결론 : GPT도 모르는거 같다.(가끔 영어로 답함)

 

3. 다른 방법을 찾아보자

- 분명 curl뿐만 아니라 다른 방식도 존재할거다. 더 찾아보자

 

 

여러 방식들을 찾아보다가 httplib라는 헤더를 가지고 활용하는 방식을 찾게 되었다.

https://github.com/yhirose/cpp-httplib

 

GitHub - yhirose/cpp-httplib: A C++ header-only HTTP/HTTPS server and client library

A C++ header-only HTTP/HTTPS server and client library - GitHub - yhirose/cpp-httplib: A C++ header-only HTTP/HTTPS server and client library

github.com

 

정말 간단한 get 방식

httplib::Client cli("localhost", 1234);

cli.Get("/hello");

 

또한 간단한 post 방식

res = cli.Post("/post", "text", "text/plain");

 

 

그러면 하나의 질문이 생긴다.

Get과 Post를 통해 가져온 json형태의 데이터는 어떻게 나누나요?

그럴땐 cJSON.h 라는 헤더를 통해 진행이 가능하다.

https://github.com/DaveGamble/cJSON

 

GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

Ultralightweight JSON parser in ANSI C. Contribute to DaveGamble/cJSON development by creating an account on GitHub.

github.com

https://github.com/DaveGamble/cJSON?tab=readme-ov-file#example

 

GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

Ultralightweight JSON parser in ANSI C. Contribute to DaveGamble/cJSON development by creating an account on GitHub.

github.com

해당 Example을 보면 쉽게 이해가 가능합니다.

 

728x90
반응형

'C, C++' 카테고리의 다른 글

빠른 문자열 복사  (0) 2024.04.29
C의 문자열 복사  (0) 2024.04.21

댓글