본문으로 바로가기

libcpr

category 블로그 (Blog)/개발로그 (Devlogs) 2025. 10. 23. 16:57

https://github.com/libcpr/cpr

 

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;
}