/** * @file web_client/http_web_client.h * @brief cpp-httplib implementation of the WebClient interface. */ #ifndef BIERGARTEN_PIPELINE_INCLUDES_HTTP_WEB_CLIENT_CURL_WEB_CLIENT_H_ #define BIERGARTEN_PIPELINE_INCLUDES_HTTP_WEB_CLIENT_CURL_WEB_CLIENT_H_ #include "web_client/web_client.h" #include /** * @brief WebClient implementation backed by cpp-httplib. * * Supports HTTP and HTTPS (requires * OpenSSL; see HTTPLIB_USE_OPENSSL_IF_AVAILABLE in CMakeLists.txt). * * URL parsing splits a full URL into scheme + host and path + query so that * httplib::Client can be constructed correctly. A new client instance is * created per request to ensure thread safety */ class HttpWebClient final : public WebClient { public: HttpWebClient() = default; ~HttpWebClient() override = default; /** * @brief Executes a blocking HTTP/HTTPS GET request against a full URL. * * @param url Fully-qualified URL, e.g. "https://en.wikipedia.org/api/rest_v1/page/summary/Berlin" * @return Response body on HTTP 2xx; throws std::runtime_error otherwise. */ std::string Get(const std::string& url) override; /** * @brief Percent-encodes a single URI component (query parameter value or * path segment). Delegates to httplib::encode_uri_component(). * * @param value Raw string to encode. * @return Percent-encoded string safe for use in a URL. */ std::string UrlEncode(const std::string& value) override; }; #endif