# mp-httpclient **Repository Path**: maplehub/mp-httpclient ## Basic Information - **Project Name**: mp-httpclient - **Description**: 基于BOOST库实现HTTP客户端及C++应用开发中所需的一些常用功能 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-27 - **Last Updated**: 2024-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: boost, HttpClient ## README # mp-httpclient ## 介绍 基于BOOST库实现 C++ HTTP客户端以及应用开发中所需的一些常用功能 ## 基于BOOST库实现HTTP客户端 #### 功能描述 * 简单易用 * 支持HTTP GET 、POST 、PUT、DELETE请求 * 支持FORM表单提交 * 支持文件上传和下载 * 支持HTTPS(SSL) * 支持同步调用(阻塞) 或 异步调用 (回调) * 实现HTTP连接池管理,包括创建连接、保持连接、回收连接和连接过期等 * 支持KEEP ALIVE,支持HTTP连接复用 * 可借助 progress_callback 和 complete_callback 等回调函数处理请求结果 #### 快速使用 **PS:更多功能及用法请参考项目中的单元测试** 1. 执行Http Get请求 ```c++ #include #include "mpHttpClient.h" using namespace MP::HTTP; void http_get(){ //创建HttpClient并设置URL基地址 HttpClient::ptr_s client = createHttpClient(); client->getBaseAddress().setBaseUrl("https://localhost:5001/"); //执行Http get请求并获得返回值HttpResponseMessage HttpResponseMessage::ptr_s resp = client->get("/weatherforecast"); std::string result = resp->getHttpResponseContent()->getData(); std::cout << result; } ``` 2. 执行Http Post请求 ```c++ #include #include "mpHttpClient.h" #include "Mapper/mpFishMapper.h" using namespace MP::HTTP; void http_post(){ //创建HttpClient并设置URL基地址 HttpClient::ptr_s client = createHttpClient(); client->getBaseAddress().setBaseUrl("https://localhost:5001/"); //定义一个结构体 FishInfo fish; fish_post.Id = 3306; fish_post.Name = "三文鱼"; fish_post.Pinyin = "sanwenyu"; fish_post.IsLivingInSea = true; //将结构体转换为json字符串 std::string json; MP::Mapper::objectMapperToJsonString(fish_post,json); //创建Http请求内容 HttpRequestContent::ptr_s requestContent = createHttpRequestJsonContent(json); //执行Http post请求并获得返回值HttpResponseMessage HttpResponseMessage::ptr_s rep_post = client->post("/api/fish",requestContent); //检查请求是否执行成 std::cout << rep_post->isSuccess(); } ``` 3. 执行Http 表单提交(含文件上传) ```c++ #include #include "mpHttpClient.h" using namespace MP::HTTP; void http_post_form(){ //创建HttpClient并设置URL基地址 HttpClient::ptr_s client = createHttpClient(); client->getBaseAddress().setBaseUrl("https://localhost:5001/"); //待上传的文件路径 std::string path = MP::FileUtils::get_appdir() + PATH_DELIM + "test_form.jpg"; //创建Http 表单请求内容(有key/value文本及文件) HttpRequestMultipartContent::ptr_s req_form_content = createHttpRequestMultipartContent(); req_form_content->addFormData("Message","just for test"); req_form_content->addFormData("Message2","just for test 2"); req_form_content->addFormFile("test_form.jpg","test_form.jpg",path); //执行Http请求并获得返回值HttpResponseMessage HttpResponseMessage::ptr_s rep_form = client->post("/api/filesystem/UploadFormModel",req_form_content); //检查请求是否执行成 std::cout << rep_form->isSuccess(); } ``` 4. 执行Http 文件下载 ```c++ #include #include "mpHttpClient.h" using namespace MP::HTTP; void http_download(){ //创建HttpClient并设置URL基地址 HttpClient::ptr_s client = createHttpClient(); client->getBaseAddress().setBaseUrl("https://localhost:5001/"); //文件路径下载后保存的路径 std::string path = MP::FileUtils::get_appdir() + PATH_DELIM + "tmp.jpg"; //执行下载请求 bool isSuccess = client->download("/api/filesystem/download_img.jpg",path); std::cout << isSuccess; } ``` 5. 执行Http 异步请求 ```c++ #include #include "mpHttpClient.h" #include "Mapper/mp_http_send_complete_callback.h" using namespace MP::HTTP; void http_async(){ boost::asio::io_context context; //创建HttpClient并设置URL基地址 HttpClientAsync::ptr_s client = createHttpClientAsync(context); client->getBaseAddress().setBaseUrl("https://localhost:5001/"); //异步执行多个请求 client->getAsync("/api/fish",http_send_complete_callback("fish")); client->getAsync("/api/fish/9527",http_send_complete_callback("fish")); client->getAsync("/api/fish/9528",http_send_complete_callback("fish")); context.run(); } ``` ## 常用功能 * 字符串编解码: - 字符串base64编解码 - URL编解码: - ecb加解密: * 文件和文件夹操作 - 获取当前应用所在目录、当前用户工作目录、所有用户公共目录、当前用户桌面目录 - 读取文件大小、名称、创建时间等 - 读写文本文件内容 - 创建、删除、复制、重命名文件 - 创建、删除、清空文件夹 - 检查文件、文件夹是否存在 * HASH计算 - MD5 - SHA1 - HmacSha1 - Crc64 * 随机函数 - 获取min至max之间的随机整数 - 获取uuid - 获取指定长度的随机字符串 * 操作日志 * 其他 - 字符串操作,例如:Upper、Lower、Trim、Split、Join等 - 获取当前用户名称 - 获取随机数 - 获取随机字符串 - 获取当前进程ID、路径 - 启动进程( Sync 或 Async ) - 等待线程退出 - 等待进程退出 ## 依赖说明 IDE 使用 QT Creator 5,编译器 GCC ,依赖库: * Boost 1.69 * easyloggingpp 9.96.7 * openssl 1.0.2 ## 平台支持 程序已在以下平台做过测试: * Windows( X86、X86_64 ) * Linux ( X86_64、ARM64、MIPS ) * MAcOS ( X86_64 ) ## 许可 MIT ## 反馈 任何问题都欢迎在 issue 里交流 ## 鼓励 如果这个项目对您有帮助,请您给我一点鼓励。 * 给它点亮三连: Star, Watch, Fork; * 向身边的同事与伙伴推荐,在技术论坛向您的读者推荐; * 积极反馈问题,提出建议; * 参与项目的开发,贡献您的力量; * 让我知道它被运用到了哪些的项目上;