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.
58 lines
1.3 KiB
C++
58 lines
1.3 KiB
C++
#include "webcc/rest_client.h"
|
|
|
|
#include "webcc/http_client.h"
|
|
#include "webcc/http_request.h"
|
|
|
|
namespace webcc {
|
|
|
|
RestClient::RestClient(const std::string& host, const std::string& port)
|
|
: host_(host), port_(port),
|
|
timeout_seconds_(0), timed_out_(false),
|
|
error_(kNoError) {
|
|
if (port_.empty()) {
|
|
std::size_t i = host_.find_last_of(':');
|
|
if (i != std::string::npos) {
|
|
port_ = host_.substr(i + 1);
|
|
host_ = host_.substr(0, i);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool RestClient::Request(const std::string& method, const std::string& url,
|
|
std::string&& content) {
|
|
response_.reset();
|
|
|
|
error_ = kNoError;
|
|
timed_out_ = false;
|
|
|
|
HttpRequest http_request;
|
|
|
|
http_request.set_method(method);
|
|
http_request.set_url(url);
|
|
http_request.SetHost(host_, port_);
|
|
|
|
if (!content.empty()) {
|
|
http_request.SetContent(std::move(content), true);
|
|
http_request.SetContentType(kAppJsonUtf8);
|
|
}
|
|
|
|
http_request.UpdateStartLine();
|
|
|
|
HttpClient http_client;
|
|
|
|
if (timeout_seconds_ > 0) {
|
|
http_client.set_timeout_seconds(timeout_seconds_);
|
|
}
|
|
|
|
if (!http_client.Request(http_request)) {
|
|
error_ = http_client.error();
|
|
timed_out_ = http_client.timed_out();
|
|
return false;
|
|
}
|
|
|
|
response_ = http_client.response();
|
|
return true;
|
|
}
|
|
|
|
} // namespace webcc
|