Motified WebCC library. Oraginal Source: https://github.com/sprinfall/webcc
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Chunting Gu c2a009f68a Don't log EOF as error. 6 years ago
autotest Refine the parsing of response status line; add UT for utility. 6 years ago
data Refine the support for uploading files. 6 years ago
doc/screenshots Update screenshots 6 years ago
examples Allow to add Date header to the request. 6 years ago
third_party Remove SOAP support 6 years ago
unittest Allow to add Date header to the request. 6 years ago
webcc Don't log EOF as error. 6 years ago
CMakeLists.txt Remove log level FATA. 6 years ago
CPPLINT.cfg Add config file for cpplint. 7 years ago
LICENSE Create LICENSE 7 years ago
README.md Remove http prefix 6 years ago
_clang-format Support terminal colors for logger. 6 years ago

README.md

webcc

C++ client and server library for HTTP and REST based on Boost Asio.

Please turn to our Wiki (under construction) for more tutorials and guides.

Wondering how to build Webcc? Click Build Instructions.

Client API Examples

A complete client example:

#include <iostream>

#include "webcc/client_session.h"
#include "webcc/logger.h"

int main() {
  // Configure logger.
  WEBCC_LOG_INIT("", webcc::LOG_CONSOLE);
  
  // Session provides convenient request APIs, stores request configurations
  // and manages persistent connenction.
  webcc::ClientSession session;

  // Catch exceptions for error handling.
  try {
    // Send a HTTP GET request.
    auto r = session.Get("http://httpbin.org/get");

    // Print the response content data.
    std::cout << r->content() << std::endl;

  } catch (const webcc::Exception& e) {
    std::cout << e.what() << std::endl;
  }

  return 0;
}

The Get() method is nothing but a shortcut of Request(). Using Request() directly is more complicated:

auto r = session.Request(webcc::RequestBuilder{}.Get().
                         Url("http://httpbin.org/get")
                         ());

As you can see, a helper class named RequestBuilder is used to chain the parameters and finally build (don't miss the () operator) a request object.

Both the shortcut and Request() accept URL query parameters:

// Query parameters are passed using a std::vector. 
session.Get("http://httpbin.org/get", { "key1", "value1", "key2", "value2" });

session.Request(webcc::RequestBuilder{}.Get().
                Url("http://httpbin.org/get").
                Query("key1", "value1").
                Query("key2", "value2")
                ());

Adding additional headers is also easy:

session.Get("http://httpbin.org/get",
            {"key1", "value1", "key2", "value2"},
            {"Accept", "application/json"});  // Also a std::vector
                
session.Request(webcc::RequestBuilder{}.Get().
                Url("http://httpbin.org/get").
                Query("key1", "value1").
                Query("key2", "value2").
                Header("Accept", "application/json")
                ());

Accessing HTTPS has no difference from HTTP:

session.Get("https://httpbin.org/get");

NOTE: The HTTPS/SSL support requires the build option WEBCC_ENABLE_SSL to be enabled.

Listing GitHub public events is not a big deal:

auto r = session.Get("https://api.github.com/events");

You can then parse r->content() to JSON object with your favorite JSON library. My choice for the examples is jsoncpp. But the library itself doesn't understand JSON nor require one. It's up to you to choose the most appropriate JSON library.