Add shortcuts for GET, POST, etc. to HttpClientSession.

This commit is contained in:
Chunting Gu
2019-03-22 16:11:01 +08:00
parent 52231d52e6
commit 3b7f4ecacf
14 changed files with 198 additions and 115 deletions
+6 -14
View File
@@ -18,8 +18,6 @@ bool kSslVerify = false;
bool kSslVerify = true;
#endif
const std::size_t kBufferSize = 1500;
const std::string kUrlRoot = "https://api.github.com";
// -----------------------------------------------------------------------------
@@ -65,8 +63,7 @@ void PrettyPrintJsonString(const std::string& str) {
// List public events.
void ListEvents(webcc::HttpClientSession& session) {
try {
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url(kUrlRoot + "/events")());
auto r = session.Get(kUrlRoot + "/events");
PRINT_JSON_STRING(r->content());
@@ -81,8 +78,7 @@ void ListEvents(webcc::HttpClientSession& session) {
void ListUserFollowers(webcc::HttpClientSession& session,
const std::string& user) {
try {
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url(kUrlRoot + "/users/" + user + "/followers")());
auto r = session.Get(kUrlRoot + "/users/" + user + "/followers");
PRINT_JSON_STRING(r->content());
@@ -99,9 +95,8 @@ void ListUserFollowers(webcc::HttpClientSession& session,
void ListAuthUserFollowers(webcc::HttpClientSession& session,
const std::string& auth) {
try {
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url(kUrlRoot + "/user/followers").
header("Authorization", auth)());
auto r = session.Get(kUrlRoot + "/user/followers", {},
{"Authorization", auth});
PRINT_JSON_STRING(r->content());
@@ -116,11 +111,8 @@ void CreateAuthorization(webcc::HttpClientSession& session,
std::string data = "{'note': 'Webcc test', 'scopes': ['public_repo', 'repo', 'repo:status', 'user']}";
auto r = session.Request(webcc::HttpRequestBuilder{}.Post().
url(kUrlRoot + "/authorizations").
data(std::move(data)).
json(true).
header("Authorization", auth)());
auto r = session.Post(kUrlRoot + "/authorizations", std::move(data), true,
{"Authorization", auth});
std::cout << r->content() << std::endl;
+29 -18
View File
@@ -20,13 +20,25 @@ bool kSslVerify = true;
void ExampleBasic() {
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)());
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;
}
// Use predefined shortcuts.
void ExampleShortcut() {
webcc::HttpClientSession session;
auto r = session.Get("http://httpbin.org/get",
{"key1", "value1", "key2", "value2"},
{"Accept", "application/json"});
std::cout << r->content() << std::endl;
}
@@ -36,10 +48,11 @@ void ExampleHttps() {
webcc::HttpClientSession session;
session.set_ssl_verify(kSslVerify);
auto r = session.Request(webcc::HttpRequestBuilder{}.Get().
url("https://httpbin.org/get").
parameter("key1", "value1").
header("Accept", "application/json")());
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;
}
@@ -61,25 +74,23 @@ void ExampleKeepAlive(const std::string& url) {
session.set_ssl_verify(kSslVerify);
// Keep-Alive
session.Request(webcc::HttpRequestBuilder{}.Get().url(url)());
session.Get(url);
// Close
session.Request(webcc::HttpRequestBuilder{}.Get().url(url).keep_alive(false)());
session.Get(url, {}, {"Connection", "Close"});
// Keep-Alive
session.Request(webcc::HttpRequestBuilder{}.Get().url(url)());
session.Get(url);
}
void ExampleCompression() {
HttpClientSession session;
auto r = session.Request(webcc::HttpRequestBuilder{}.
Get().url("http://httpbin.org/gzip")());
auto r = session.Get("http://httpbin.org/gzip");
std::cout << r->content() << std::endl;
r = session.Request(webcc::HttpRequestBuilder{}.
Get().url("http://httpbin.org/deflate")());
r = session.Get("http://httpbin.org/deflate");
std::cout << r->content() << std::endl;
}
+5 -14
View File
@@ -55,8 +55,7 @@ public:
bool ListBooks(std::list<Book>* books) {
try {
auto r = session_.Request(webcc::HttpRequestBuilder{}.Get().
url(url_ + "/books")());
auto r = session_.Get(url_ + "/books");
if (!CheckStatus(r, webcc::http::Status::kOK)) {
// Response HTTP status error.
@@ -87,10 +86,7 @@ public:
req_json["price"] = price;
try {
auto r = session_.Request(webcc::HttpRequestBuilder{}.Post().
url(url_ + "/books").
data(JsonToString(req_json)).
json(true)());
auto r = session_.Post(url_ + "/books", JsonToString(req_json), true);
if (!CheckStatus(r, webcc::http::Status::kCreated)) {
return false;
@@ -118,8 +114,7 @@ public:
bool GetBook(const std::string& id, Book* book) {
try {
auto r = session_.Request(webcc::HttpRequestBuilder{}.Get().
url(url_ + "/books/" + id)());
auto r = session_.Get(url_ + "/books/" + id);
if (!CheckStatus(r, webcc::http::Status::kOK)) {
return false;
@@ -140,10 +135,7 @@ public:
json["price"] = price;
try {
auto r = session_.Request(webcc::HttpRequestBuilder{}.Put().
url(url_ + "/books/" + id).
data(JsonToString(json)).
json(true)());
auto r = session_.Put(url_ + "/books/" + id, JsonToString(json), true);
if (!CheckStatus(r, webcc::http::Status::kOK)) {
return false;
@@ -159,8 +151,7 @@ public:
bool DeleteBook(const std::string& id) {
try {
auto r = session_.Request(webcc::HttpRequestBuilder{}.Delete().
url(url_ + "/books/" + id)());
auto r = session_.Delete(url_ + "/books/" + id);
if (!CheckStatus(r, webcc::http::Status::kOK)) {
return false;
+2 -2
View File
@@ -40,7 +40,7 @@ public:
: sleep_seconds_(sleep_seconds) {
}
public:
protected:
// Get a list of books based on query parameters.
void Get(const webcc::UrlQuery& query, webcc::RestResponse* response) final;
@@ -64,7 +64,7 @@ public:
: sleep_seconds_(sleep_seconds) {
}
public:
protected:
// Get the detailed information of a book.
void Get(const webcc::UrlMatches& url_matches,
const webcc::UrlQuery& query,