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 e9f0cd97e8 Link static SSL libraries. 6 years ago
autotest Remove PostFile() from session; refine cmake files; replace final with override. 6 years ago
data Refine the support for uploading files. 6 years ago
doc/screenshots Fix link error against crypto32; update screenshots for configure on Mac. 6 years ago
examples Remove PostFile() from session; refine cmake files; replace final with override. 6 years ago
third_party Remove SOAP support 6 years ago
unittest Remove PostFile() from session; refine cmake files; replace final with override. 6 years ago
webcc Remove PostFile() from session; refine cmake files; replace final with override. 6 years ago
CMakeLists.txt Link static SSL libraries. 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.