HTTP client

The first code example is the simplest thing you can do with the cpp-netlib. The application is a simple HTTP client, which can be found in the subdirectory libs/network/example/http_client.cpp. All this example doing is creating and sending an HTTP request to a server and printing the response body.

The code

Without further ado, the code to do this is as follows:

#include <boost/network/protocol/http/client.hpp>
#include <iostream>

int main(int argc, char *argv[]) {
    using namespace boost::network;

    if (argc != 2) {
        std::cout << "Usage: " << argv[0] << " [url]" << std::endl;
        return 1;
    }

    http::client client;
    http::client::request request(argv[1]);
    request << header("Connection", "close");
    http::client::response response = client.get(request);
    std::cout << body(response) << std::endl;

    return 0;
}

Running the example

You can then run this to get the Boost website:

$ cd ~/cpp-netlib-build
$ make http_client
$ ./example/http_client http://www.boost.org/

Note

The instructions for all these examples assume that cpp-netlib is build outside the source tree, according to CMake conventions. For the sake of consistency we assume that this is in the ~/cpp-netlib-build directory.

Diving into the code

Since this is the first example, each line will be presented and explained in detail.

#include <boost/network/protocol/http/client.hpp>

All the code needed for the HTTP client resides in this header.

http::client client;

First we create a client object. The client abstracts all the connection and protocol logic. The default HTTP client is version 1.1, as specified in RFC 2616.

http::client::request request(argv[1]);

Next, we create a request object, with a URI string passed as a constructor argument.

request << header("Connection", "close");

cpp-netlib makes use of stream syntax and directives to allow developers to build complex message structures with greater flexibility and clarity. Here, we add the HTTP header “Connection: close” to the request in order to signal that the connection will be closed after the request has completed.

http::client::response response = client.get(request);

Once we’ve built the request, we then make an HTTP GET request throught the http::client from which an http::response is returned. http::client supports all common HTTP methods: GET, POST, HEAD, DELETE.

std::cout << body(response) << std::endl;

Finally, though we don’t do any error checking, the response body is printed to the console using the body directive.

That’s all there is to the HTTP client. In fact, it’s possible to compress this to a single line:

std::cout << body(http::client().get(http::request("http://www.boost.org/")));

The next example will introduce the uri class.