diff options
| author | Stefan Boberg <[email protected]> | 2023-05-15 18:53:38 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-15 18:53:38 +0200 |
| commit | 3fb79e25865c3bafa9156c2db767ddc16f5019f3 (patch) | |
| tree | d476cf8c3b05793642b1a029171d76dfcf9f092d /src/zenhttp/httpclient.cpp | |
| parent | added trace::DescribeSession to TraceInit (diff) | |
| download | zen-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.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 { |