aboutsummaryrefslogtreecommitdiff
path: root/src/zenhttp/httpclient.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-15 18:53:38 +0200
committerGitHub <[email protected]>2023-05-15 18:53:38 +0200
commit3fb79e25865c3bafa9156c2db767ddc16f5019f3 (patch)
treed476cf8c3b05793642b1a029171d76dfcf9f092d /src/zenhttp/httpclient.cpp
parentadded trace::DescribeSession to TraceInit (diff)
downloadzen-3fb79e25865c3bafa9156c2db767ddc16f5019f3.tar.xz
zen-3fb79e25865c3bafa9156c2db767ddc16f5019f3.zip
Better defaults for zen cli (#302)
added ZenCmdBase::ResolveTargetHostSpec - this is a helper which provides better default behaviour for commands which interact with a local zen server instance. more specifically it picks a default based on which processes are actually running on the local machine this change also wires up the Scrub command along with some required HttpClient improvements
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
{