From 72f6f0ab6652c886738a7d18677ad0c0b3715f16 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Wed, 17 Apr 2024 14:40:45 +0800 Subject: [PATCH] Bug fix & New function --- http_client.cpp | 4 ++-- str_util.cpp | 10 ++++++++++ str_util.h | 7 +++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/http_client.cpp b/http_client.cpp index 753274f..75f1b5f 100644 --- a/http_client.cpp +++ b/http_client.cpp @@ -527,7 +527,7 @@ bool Response::pullData() { void Response::parseStatus() { if (this->code) return; auto line = this->readLine(); - auto parts = str_util::str_splitv(line, " ", 3); + auto parts = str_util::str_splitv(line, " "); if (parts.size() < 3) { throw std::runtime_error("Invalid HTTP status line"); } @@ -537,7 +537,7 @@ void Response::parseStatus() { if (sscanf(parts[1].c_str(), "%" SCNu16, &this->code) != 1) { throw std::runtime_error("Invalid HTTP status code"); } - this->reason = parts[2]; + this->reason = str_util::str_join(std::list(parts.begin() + 2, parts.end()), " "); } void Response::parseHeader(Request& req) { diff --git a/str_util.cpp b/str_util.cpp index c9cb663..2d28d60 100644 --- a/str_util.cpp +++ b/str_util.cpp @@ -109,3 +109,13 @@ std::string str_util::str_trim(std::string input) { } return input; } + +std::string str_util::str_join(std::list input, std::string pattern) { + std::string output; + for (auto i = input.begin(); i != input.end();) { + output += *i; + i++; + if (i != input.end()) output += pattern; + } + return output; +} diff --git a/str_util.h b/str_util.h index 8b3dd1b..320a884 100644 --- a/str_util.h +++ b/str_util.h @@ -70,5 +70,12 @@ namespace str_util { * @return Result */ std::string remove_quote(std::string input); + /** + * @brief Join a list of string with a pattern + * @param input Input list + * @param pattern Pattern + * @return Result + */ + std::string str_join(std::list input, std::string pattern); } #endif