C++中发起HTTP请求需借助第三方库,常用方式包括libcurl和cpp-httplib。1. 使用libcurl可实现跨平台、稳定高效的网络通信,支持GET、POST等方法,需初始化环境、设置选项、注册回调函数并链接库文件;2. cpp-httplib为单头文件库,接口简洁,无需复杂配置,适合轻量级项目;3. 实际使用时应处理错误、支持HTTPS并考虑线程安全,建议封装成类以提升可维护性。

在C++中发起HTTP请求不像Python或JavaScript那样内置支持,但通过合适的库可以高效实现。下面介绍几种常用方式,帮助你快速在C++项目中完成HTTP网络请求。
使用libcurl发起HTTP请求
libcurl 是C/C++中最流行的网络请求库,支持HTTP、HTTPS、FTP等多种协议,跨平台且稳定。
以下是使用libcurl发送GET请求的基本步骤:
- 安装libcurl:Linux下可通过包管理器(如apt install libcurl4-openssl-dev),Windows可用vcpkg或手动编译
- 包含头文件:
#include - 初始化curl环境,设置URL和回调函数
- 执行请求并获取响应
示例代码(GET请求):
立即学习“C++免费学习笔记(深入)”;
#include#include #include // 回调函数:接收响应数据 size_t WriteCallback(void contents, size_t size, size_t nmemb, std::string response) { size_t totalSize = size nmemb; response->append((char)contents, totalSize); return totalSize; }
int main() { CURL* curl; CURLcode res; std::string response;
curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://www.php.cn/link/2649b36f54ee6080dd7e2c057585bce6/get"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); res = curl_easy_perform(curl); if (res == CURLE_OK) { std::cout << "Response:\n" << response << std::endl; } else { std::cerr << "Request failed: " << curl_easy_strerror(res) << std::endl; } curl_easy_cleanup(curl); } curl_global_cleanup(); return 0;}
编译时需链接curl库:
g++ -o http_request http_request.cpp -lcurl发送POST请求(带数据)
POST请求需要设置请求方法和发送的数据体。
示例:发送JSON数据
std::string postData = R"({"name": "test", "value": 123})";if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://www.php.cn/link/dc076eb055ef5f8a60a41b6195e9f329"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData.c_str());
struct curl_slist* headers = nullptr; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); res = curl_easy_perform(curl); // ...处理结果}
使用现代C++库:cpp-httplib
如果你希望更简洁的接口,cpp-httplib 是一个基于头文件的轻量级HTTP服务器与客户端库,仅需包含一个头文件即可使用。
GitHub地址:https://www.php.cn/link/f3062c61fcdbab5937095c1629b71d05
示例(GET请求):
#include "httplib.h" #includeint main() { httplib::Client cli("https://www.php.cn/link/2649b36f54ee6080dd7e2c057585bce6");
auto res = cli.Get("/get"); if (res && res->status == 200) { std::cout << res->body << std::endl; } return 0;}
优点:无需额外链接库,只需包含头文件,适合小型项目或快速开发。
注意事项与建议
实际开发中需要注意以下几点:
- 始终检查返回值和状态码,避免空指针或网络异常导致崩溃
- 启用HTTPS支持时确保libcurl编译时包含OpenSSL等后端
- 多线程环境下注意curl的全局初始化和并发安全
- 生产环境建议封装成类,便于复用和管理连接
基本上就这些。选择libcurl适合复杂场景,追求简单可选cpp-httplib。根据项目需求灵活选用即可。











