#pragma once #include #include #include #include #include class HttpClient { private: SSL *ssl; int sock; std::string full_url, proto, server, port, uri, params, href; std::basic_string ssl_read_packet; std::map headers_map; public: HttpClient() = default; std::pair doRequest(const std::string &method, const std::string &url, const std::map &headers, const std::string &request_body); private: static std::string inetAddress(const std::string &hostname); int sslRecvPacket(); int sslSendPacket(const std::string &buf); int sslRequest(const std::string &server_name, const std::string &request); static void logSSL(); static void showCerts(SSL* ssl); void parseURL(const std::string &url); [[nodiscard]] static std::string createRequestHeaders(const std::map &headers) ; static int responseStatusCode(const std::string &status_str) ; void responseHeaders(const std::string &hdr); };