블로그 (Blog)/개발로그 (Devlogs)
libcpr
티클러
2025. 10. 23. 16:57
cpr (C++ Requests)은 libcurl을 간단히 감싼 래퍼로 아래와 같이 파일 다운로드도 간단히 할 수 있음.
# g++ test.cpp -lcpr
#include <fstream>
#include <iostream>
#include <cpr/cpr.h>
int main() {
const std::string url = "https://github.com/libcpr/cpr/archive/refs/tags/1.12.0.zip";
const std::string output_filename = "download.zip";
std::ofstream output_file(output_filename, std::ios::binary);
if (!output_file.is_open()) {
std::cerr << "파일을 열 수 없습니다: " << output_filename << std::endl;
return 1;
}
// CPR 세션 생성
cpr::Session session;
session.SetUrl(cpr::Url{url});
// 다운로드 요청 실행
// cpr::Download를 사용하여 응답 본문을 파일 스트림에 직접 기록
cpr::Response r = session.Download(output_file);
// 다운로드 완료 후 파일 스트림 닫기
output_file.close();
// 응답 상태 확인
if (r.status_code == 200) {
std::cout << "파일 다운로드 성공: " << output_filename << std::endl;
} else {
std::cerr << "파일 다운로드 실패. HTTP 상태 코드: " << r.status_code << std::endl;
std::cerr << "오류 메시지: " << r.error.message << std::endl;
// 다운로드 실패 시 생성된 불완전한 파일 삭제 (선택 사항)
remove(output_filename.c_str());
}
return 0;
}