aboutsummaryrefslogtreecommitdiff
path: root/src/zenhttp/httpclient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenhttp/httpclient.cpp')
-rw-r--r--src/zenhttp/httpclient.cpp46
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
{