Add HttpRequestBuilder to replace HttpRequestArgs

This commit is contained in:
Chunting Gu
2019-03-22 10:17:27 +08:00
parent d906470a4a
commit da1dbbb073
15 changed files with 318 additions and 427 deletions
+16 -7
View File
@@ -65,8 +65,11 @@ void PrettyPrintJsonString(const std::string& str) {
// List public events.
void ListEvents(webcc::HttpClientSession& session) {
try {
auto r = session.Get(kUrlRoot + "/events");
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url(kUrlRoot + "/events")());
PRINT_JSON_STRING(r->content());
} catch (const webcc::Exception& e) {
std::cout << e.what() << std::endl;
}
@@ -78,8 +81,11 @@ void ListEvents(webcc::HttpClientSession& session) {
void ListUserFollowers(webcc::HttpClientSession& session,
const std::string& user) {
try {
auto r = session.Get(kUrlRoot + "/users/" + user + "/followers");
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url(kUrlRoot + "/users/" + user + "/followers")());
PRINT_JSON_STRING(r->content());
} catch (const webcc::Exception& e) {
std::cout << e.what() << std::endl;
}
@@ -93,8 +99,9 @@ void ListUserFollowers(webcc::HttpClientSession& session,
void ListAuthUserFollowers(webcc::HttpClientSession& session,
const std::string& auth) {
try {
auto r = session.Get(kUrlRoot + "/user/followers", {},
{ "Authorization", auth });
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url(kUrlRoot + "/user/followers").
header("Authorization", auth)());
PRINT_JSON_STRING(r->content());
@@ -109,8 +116,11 @@ void CreateAuthorization(webcc::HttpClientSession& session,
std::string data = "{'note': 'Webcc test', 'scopes': ['public_repo', 'repo', 'repo:status', 'user']}";
auto r = session.Post(kUrlRoot + "/authorizations", std::move(data), true,
{"Authorization", auth});
auto r = session.Request(webcc::HttpRequestBuilder{}.Post().
url(kUrlRoot + "/authorizations").
data(std::move(data)).
json(true).
header("Authorization", auth)());
std::cout << r->content() << std::endl;
@@ -125,7 +135,6 @@ int main() {
WEBCC_LOG_INIT("", webcc::LOG_CONSOLE);
webcc::HttpClientSession session;
session.set_ssl_verify(kSslVerify);
ListEvents(session);
+24 -50
View File
@@ -19,55 +19,27 @@ bool kSslVerify = true;
// Examples
void ExampleBasic() {
HttpClientSession session;
auto r = session.Request(HttpRequestArgs{"GET"}
.url("http://httpbin.org/get")
.parameters({"key1", "value1", "key2", "value2"})
.headers({"Accept", "application/json"})
.buffer_size(1000));
webcc::HttpClientSession session;
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url("http://httpbin.org/get").
parameter("key1", "value1").
parameter("key2", "value2").
header("Accept", "application/json").
buffer(1000)());
std::cout << r->content() << std::endl;
}
// If you want to create the args object firstly, there might be an extra
// call to its move constructor (maybe only for MSVC).
// - constructor: HttpRequestArgs{ "GET" }
// - move constructor: auto args = ...
void ExampleArgs() {
HttpClientSession session;
auto args = HttpRequestArgs{"GET"}
.url("http://httpbin.org/get")
.parameters({"key1", "value1", "key2", "value2"})
.headers({"Accept", "application/json"})
.buffer_size(1000);
// Note the std::move().
session.Request(std::move(args));
}
// Use pre-defined wrappers.
void ExampleWrappers() {
HttpClientSession session;
session.Get("http://httpbin.org/get", {"key1", "value1", "key2", "value2"},
{"Accept", "application/json"},
HttpRequestArgs{}.buffer_size(1000));
session.Post("http://httpbin.org/post", "{'key': 'value'}", true,
{"Accept", "application/json"});
}
// HTTPS is auto-detected from the URL scheme.
void ExampleHttps() {
HttpClientSession session;
webcc::HttpClientSession session;
session.set_ssl_verify(kSslVerify);
auto r = session.Request(HttpRequestArgs{"GET"}
.url("https://httpbin.org/get")
.parameters({"key1", "value1", "key2", "value2"})
.headers({"Accept", "application/json"})
.ssl_verify(kSslVerify));
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url("https://httpbin.org/get").
parameter("key1", "value1").
header("Accept", "application/json")());
std::cout << r->content() << std::endl;
}
@@ -86,27 +58,29 @@ void ExampleHttps() {
//
void ExampleKeepAlive(const std::string& url) {
HttpClientSession session;
session.set_ssl_verify(kSslVerify);
// Keep-Alive
session.Request(webcc::HttpRequestArgs("GET").url(url).
ssl_verify(kSslVerify));
session.Request(webcc::HttpRequestBuilder{}.Get().url(url)());
// Close
session.Request(webcc::HttpRequestArgs("GET").url(url).
ssl_verify(kSslVerify).keep_alive(false));
session.Request(webcc::HttpRequestBuilder{}.Get().url(url).keep_alive(false)());
// Keep-Alive
session.Request(webcc::HttpRequestArgs("GET").url(url).
ssl_verify(kSslVerify));
session.Request(webcc::HttpRequestBuilder{}.Get().url(url)());
}
void ExampleCompression() {
HttpClientSession session;
auto r = session.Get("http://httpbin.org/gzip");
auto r = session.Request(webcc::HttpRequestBuilder{}.
Get().url("http://httpbin.org/gzip")());
std::cout << r->content() << std::endl;
r = session.Get("http://httpbin.org/deflate");
r = session.Request(webcc::HttpRequestBuilder{}.
Get().url("http://httpbin.org/deflate")());
std::cout << r->content() << std::endl;
}
+14 -5
View File
@@ -55,7 +55,8 @@ public:
bool ListBooks(std::list<Book>* books) {
try {
auto r = session_.Get(url_ + "/books");
auto r = session_.Request(webcc::HttpRequestBuilder{}.Get().
url(url_ + "/books")());
if (!CheckStatus(r, webcc::http::Status::kOK)) {
// Response HTTP status error.
@@ -86,7 +87,10 @@ public:
req_json["price"] = price;
try {
auto r = session_.Post(url_ + "/books", JsonToString(req_json), true);
auto r = session_.Request(webcc::HttpRequestBuilder{}.Post().
url(url_ + "/books").
data(JsonToString(req_json)).
json(true)());
if (!CheckStatus(r, webcc::http::Status::kCreated)) {
return false;
@@ -114,7 +118,8 @@ public:
bool GetBook(const std::string& id, Book* book) {
try {
auto r = session_.Get(url_ + "/books/" + id);
auto r = session_.Request(webcc::HttpRequestBuilder{}.Get().
url(url_ + "/books/" + id)());
if (!CheckStatus(r, webcc::http::Status::kOK)) {
return false;
@@ -135,7 +140,10 @@ public:
json["price"] = price;
try {
auto r = session_.Put(url_ + "/books/" + id, JsonToString(json), true);
auto r = session_.Request(webcc::HttpRequestBuilder{}.Put().
url(url_ + "/books/" + id).
data(JsonToString(json)).
json(true)());
if (!CheckStatus(r, webcc::http::Status::kOK)) {
return false;
@@ -151,7 +159,8 @@ public:
bool DeleteBook(const std::string& id) {
try {
auto r = session_.Delete(url_ + "/books/" + id);
auto r = session_.Request(webcc::HttpRequestBuilder{}.Delete().
url(url_ + "/books/" + id)());
if (!CheckStatus(r, webcc::http::Status::kOK)) {
return false;