cpr alternatives and similar libraries
Based on the "Networking" category.
Alternatively, view cpr alternatives based on common mentions on social networks and blogs.
-
libcurl
A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features -
POCO
The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems. -
C++ REST SDK
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services. -
RakNet
DISCONTINUED. RakNet is a cross platform, open source, C++ networking engine for game programmers. -
evpp
A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols. -
Simple-Web-Server
DISCONTINUED. A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications. -
wdt
DISCONTINUED. Warp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths. -
PcapPlusPlus
PcapPlusPlus is a multiplatform C++ library for capturing, parsing and crafting of network packets. It is designed to be efficient, powerful and easy to use. It provides C++ wrappers for the most popular packet processing engines such as libpcap, Npcap, WinPcap, DPDK, AF_XDP and PF_RING. -
cpp-netlib
The C++ Network Library Project -- cross-platform, standards compliant networking library. -
Restbed
Corvusoft's Restbed framework brings asynchronous RESTful functionality to C++14 applications. -
Silicon
A high performance, middleware oriented C++14 http web framework please use matt-42/lithium instead -
Simple-WebSocket-Server
DISCONTINUED. A very simple, fast, multithreaded, platform independent WebSocket (WS) and WebSocket Secure (WSS) server and client library implemented using C++11, Boost.Asio and OpenSSL. Created to be an easy way to make WebSocket endpoints in C++. -
RESTinio
Cross-platform, efficient, customizable, and robust asynchronous HTTP(S)/WebSocket server C++ library with the right balance between performance and ease of use -
IXWebSocket
websocket and http client and server library, with TLS support and very few dependencies -
nope.c
WAFer is a C language-based software platform for scalable server-side and networking applications. Think node.js for C programmers. -
mailio
mailio is a cross platform C++ library for MIME format and SMTP, POP3, IMAP protocols. It is based on the standard C++ 17 and Boost library. -
QuantumGate
QuantumGate is a peer-to-peer (P2P) communications protocol, library and API written in C++. -
NetIF
Header-only C++14 library for getting addresses associated with network interfaces without name lookups on Windows, macOS, Linux, and FreeBSD
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of cpr or a related project?
Popular Comparisons
README
C++ Requests: Curl for People
Announcements
- Like you probably have noticed,
cpr
moved to a new home from https://github.com/whoshuu/cpr to https://github.com/libcpr/cpr. Read more here. - This project is being maintained by Fabian Sauter and Kilian Traub.
- For quick help, and discussion libcpr also offer a gitter chat.
TLDR
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++17
(or C++11
in case you use cpr < 1.10.0), 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) {
cpr::Response r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"},
cpr::Authentication{"user", "pass", cpr::AuthMode::BASIC},
cpr::Parameters{{"anon", "true"}, {"key", "value"}});
r.status_code; // 200
r.header["content-type"]; // application/json; charset=utf-8
r.text; // JSON text string
return 0;
}
And here's less functional, more complicated code, without cpr.
Documentation
You can find the latest documentation here. It's a work in progress, but it should give you a better idea of how to use the library than the tests currently do.
Features
C++ Requests currently supports:
- Custom headers
- Url encoded parameters
- Url encoded POST values
- Multipart form POST upload
- File POST upload
- Basic authentication
- Bearer authentication
- Digest authentication
- NTLM authentication
- Connection and request timeout specification
- Timeout for low speed connection
- Asynchronous requests
- :cookie: support!
- Proxy support
- Callback interfaces
- PUT methods
- DELETE methods
- HEAD methods
- OPTIONS methods
- PATCH methods
- Thread Safe access to libCurl
- OpenSSL and WinSSL support for HTTPS requests
Planned
For a quick overview about the planed features, have a look at the next Milestones.
Usage
CMake
fetch_content:
If you already have a CMake project you need to integrate C++ Requests with, the primary way is to use fetch_content
.
Add the following to your CMakeLists.txt
.
include(FetchContent)
FetchContent_Declare(cpr GIT_REPOSITORY https://github.com/libcpr/cpr.git
GIT_TAG 871ed52d350214a034f6ef8a3b8f51c5ce1bd400) # The commit hash for 1.9.0. Replace with the latest from: https://github.com/libcpr/cpr/releases
FetchContent_MakeAvailable(cpr)
This will produce the target cpr::cpr
which you can link against the typical way:
target_link_libraries(your_target_name PRIVATE cpr::cpr)
That should do it!
There's no need to handle libcurl
yourself. All dependencies are taken care of for you.
All of this can be found in an example here.
find_package():
If you prefer not to use fetch_content
, you can download, build, and install the library and then use CMake find_package()
function to integrate it into a project.
Note: this feature is feasible only if CPR_USE_SYSTEM_CURL is set. (see #645)
$ git clone https://github.com/libcpr/cpr.git
$ cd cpr && mkdir build && cd build
$ cmake .. -DCPR_USE_SYSTEM_CURL=ON
$ cmake --build .
$ sudo cmake --install .
In your CMakeLists.txt
:
find_package(cpr REQUIRED)
add_executable(your_target_name your_target_name.cpp)
target_link_libraries(your_target_name PRIVATE cpr::cpr)
Packages for Linux Distributions
Alternatively, you may install a package specific to your Linux distribution. Since so few distributions currently have a package for cpr, most users will not be able to run your program with this approach.
Currently, we are aware of packages for the following distributions:
If there's no package for your distribution, try making one! If you do, and it is added to your distribution's repositories, please submit a pull request to add it to the list above. However, please only do this if you plan to actively maintain the package.
NuGet Package
For Windows, there is also a libcpr NuGet package available. Currently, x86 and x64 builds are supported with release and debug configuration.
The package can be found here: NuGet.org
Requirements
The only explicit requirements are:
- a
C++17
compatible compiler such as Clang or GCC. The minimum required version of GCC is unknown, so if anyone has trouble building this library with a specific version of GCC, do let me know - in case you only have a
C++11
compatible compiler available, all versions below cpr 1.9.x are for you. With the upcoming release of cpr 1.10.0, we are switching toC++17
as a requirement. - If you would like to perform https requests
OpenSSL
and its development libraries are required.
Building cpr - Using vcpkg
You can download and install cpr using the vcpkg dependency manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install cpr
The cpr
port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.
Building cpr - Using Conan
You can download and install cpr
using the Conan package manager. Setup your CMakeLists.txt (see Conan documentation on how to use MSBuild, Meson and others).
An example can be found here.
The cpr
package in Conan is kept up to date by Conan contributors. If the version is out of date, please create an issue or pull request on the conan-center-index
repository.