diff options
Diffstat (limited to 'src/zenhttp/httpclient.cpp')
| -rw-r--r-- | src/zenhttp/httpclient.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/zenhttp/httpclient.cpp b/src/zenhttp/httpclient.cpp index 891ada83e..fa290ef52 100644 --- a/src/zenhttp/httpclient.cpp +++ b/src/zenhttp/httpclient.cpp @@ -83,6 +83,15 @@ CommonResponse(cpr::Response&& HttpResponse) { const HttpResponseCode WorkResponseCode = HttpResponseCode(HttpResponse.status_code); + if (HttpResponse.status_code == 0) + { + // Client side failure code + + return HttpClient::Response{ + .StatusCode = WorkResponseCode, + .ResponsePayload = IoBufferBuilder::MakeCloneFromMemory(HttpResponse.error.message.data(), HttpResponse.error.message.size())}; + } + if (WorkResponseCode == HttpResponseCode::NoContent || HttpResponse.text.empty()) { return HttpClient::Response{.StatusCode = WorkResponseCode}; @@ -310,6 +319,13 @@ HttpClient::Delete(std::string_view Url) } HttpClient::Response +HttpClient::Post(std::string_view Url) +{ + Impl::Session Sess = m_Impl->AllocSession(m_BaseUri, Url); + return CommonResponse(Sess->Post()); +} + +HttpClient::Response HttpClient::Post(std::string_view Url, const IoBuffer& Payload) { Impl::Session Sess = m_Impl->AllocSession(m_BaseUri, Url); @@ -381,6 +397,36 @@ HttpClient::Response::AsText() return {}; } +std::string +HttpClient::Response::ToText() +{ + if (!ResponsePayload) + return {}; + + switch (ResponsePayload.GetContentType()) + { + case ZenContentType::kCbObject: + { + zen::ExtendableStringBuilder<1024> ObjStr; + zen::CbObject Object{SharedBuffer(ResponsePayload)}; + zen::CompactBinaryToJson(Object, ObjStr); + return ObjStr.ToString(); + } + break; + + case ZenContentType::kCSS: + case ZenContentType::kHTML: + case ZenContentType::kJavaScript: + case ZenContentType::kJSON: + case ZenContentType::kText: + case ZenContentType::kYAML: + return std::string{AsText()}; + + default: + return "<unhandled content format>"; + } +} + bool HttpClient::Response::IsSuccess() const noexcept { |