Fork me on GitHub

cpr - C++ Requests

cpr is a modern HTTP library for C++, built for people.

User Guide

This project is maintained by whoshuu

Curl for People

C++ Requests is a simple wrapper around libcurl inspired by the excellent Python Requests project.

Despite its name, libcurl’s easy interface is anything but, and making mistakes misusing it is a common source of error and frustration. Using the more expressive language facilities of C++11, this library captures the essence of making network calls into a few concise idioms.

Here’s a quick GET request:

#include <cpr/cpr.h>

int main(int argc, char** argv) {
    auto r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"},
                      cpr::Authentication{"user", "pass"},
                      cpr::Parameters{{"anon", "true"}, {"key", "value"}});
    r.status_code;                  // 200
    r.headers["content-type"];      // application/json; charset=utf-8
    r.text;                         // JSON text string
}

And here’s less functional, more complicated code, without cpr.

Features

C++ Requests currently supports:

Planned

Support for the following will be forthcoming (in rough order of implementation priority):

and much more!

Usage

For just getting this library up and running, I highly recommend forking the example project. It’s configured with the minimum CMake magic and boilerplate needed to start playing around with networked applications.

If you already have a project you need to integrate C++ Requests with, the primary way is to use git submodules. Add this repository as a submodule of your root repository:

git submodule add git@github.com:whoshuu/cpr.git
git submodule update --init --recursive

Next, add this subdirectory to your CMakeLists.txt before declaring any targets that might use it:

add_subdirectory(cpr)

This will produce two important CMake variables, CPR_INCLUDE_DIRS and CPR_LIBRARIES, which you’ll use in the typical way:

include_directories(${CPR_INCLUDE_DIRS})
target_link_libraries(your_target_name ${CPR_LIBRARIES})

and that should do it! Using the submodule method of integrating C++ Requests, there’s no need to handle libcurl yourself, all of those dependencies are taken care of for you.

Requirements

The only explicit requirements are:

Contributing

Please fork this repository and contribute back using pull requests. Features can be requested using issues. All code, comments, and critiques are greatly appreciated.