#ifndef HttpClient_H #define HttpClient_H #pragma once // 包含必要的头文件 #include "../Module/Comm/Socket/CCSocket.h" #include "CCJSONObject.h" #include "CCString.h" #include #include #include "map" #include "CCRequest.h" #include "CCClientSocket.h" #include "CCHttpResolver.h" // 定义最大数据大小 #define MaxDataSize 2048 // 命名空间CTL开始 namespace CTL { class Result { public: Result() = default; Result(int status_t, const std::string &reason); std::string version; int status = -1; std::string reason; std::map Headers; std::string body; std::string location; // Redirect location }; class ReqConfig { public: String method; // 请求方法 String path; // 请求路径 ByteArray body; // 请求体 String type; // 请求体类型 }; // HttpClient类 class HttpClient{ std::string httpUrl; std::string ip; int port = 0; bool is_https = false; std::map Headers; ClientSocket* socket = nullptr; SSL* ssl = nullptr; using onReqCallback = std::function; using onResCallback = std::function; public: explicit HttpClient(const std::string& httplink); ~HttpClient(); void setHeader(const std::string& key, const std::string& value); Result Request(ReqConfig& req,const onResCallback& ResCallback,const onReqCallback& callback); private: bool parseURL(const std::string& url); String GetRequest() const; int Read(char* buffer, size_t length) const; Result Write(const String& str) const; Result Write(const ByteArray& str) const; }; } // 命名空间CTL结束 #endif