C++中发送HTTP请求需借助第三方库,常用的是libcurl。首先安装libcurl,Linux可通过包管理器如sudo apt-get install libcurl4-openssl-dev,Windows可用vcpkg或手动编译。在代码中包含#include ,初始化CURL句柄,设置URL、回调函数和数据写入方式。通过WriteCallback函数接收响应数据并存入字符串。GET请求示例如:设置CURLOPT_URL为目标地址,CURLOPT_WRITEFUNCTION为回调函数,执行curl_easy_perform()并检查返回值,成功则输出响应内容,失败则输出错误信息,最后调用curl_easy_cleanup()释放资源。发送POST请求时使用CURLOPT_POSTFIELDS设置表单数据,默认以application/x-www-form-urlencoded格式发送;若发送JSON,需添加Content-Type头:创建curl_slist并添加"Content-Type: application/json",通过CURLOPT_HTTPHEADER设置头部信息,并传入JSON字符串作为POST数据。生产环境中应设置超时机制,如CURLOPT_TIMEOUT设为10秒,CURLOPT_CONNECTTIMEOUT设为5秒,防止阻塞。还可通过curl_easy_getinfo()获取状态码、响应时间等信息用于调试。除libcurl外,可选其他库:Boost.Beast基于Boost.Asio,支持异步IO,适合高性能场景但学习成本高;cpp-httplib是轻量级头文件库,仅需

在C++中发送HTTP请求没有像Python或JavaScript那样的内置支持,但可以通过第三方库来实现。常用的方法是使用cURL库,它是功能强大且广泛使用的开源工具,支持多种协议,包括HTTP、HTTPS等。
使用libcurl发送HTTP请求
libcurl 是C++中最常见的选择。它是一个C语言库,但可以在C++项目中直接使用,支持GET、POST等请求方式。
步骤如下:
- 安装libcurl:在Linux上可通过包管理器安装,如Ubuntu执行
sudo apt-get install libcurl4-openssl-dev;Windows可使用vcpkg或手动编译导入。 - 在代码中包含头文件:
#include - 初始化curl环境,设置请求参数,执行请求并处理响应。
以下是一个简单的GET请求示例:
立即学习“C++免费学习笔记(深入)”;
#include#include #include // 回调函数:接收响应数据 size_t WriteCallback(void contents, size_t size, size_t nmemb, std::string output) { size_t totalSize = size nmemb; output->append((char)contents, totalSize); return totalSize; }
int main() { CURL* curl; CURLcode res; std::string readBuffer;
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, &readBuffer); res = curl_easy_perform(curl); if (res == CURLE_OK) { std::cout << "Response:\n" << readBuffer << std::endl; } else { std::cerr << "Request failed: " << curl_easy_strerror(res) << std::endl; } curl_easy_cleanup(curl); } return 0;}
编译时需要链接curl库,例如:
g++ -o http_request main.cpp -lcurl发送POST请求
只需修改选项即可发送POST请求。示例如下:
curl_easy_setopt(curl, CURLOPT_URL, "https://www.php.cn/link/2649b36f54ee6080dd7e2c057585bce6/post"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=John&age=30");这会以application/x-www-form-urlencoded格式发送数据。如需发送JSON,添加请求头:
struct curl_slist* headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"John\", \"age\":30}");错误处理与超时设置
生产环境中应设置超时和错误检查:
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10); // 连接超时10秒 curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5); // 请求超时5秒通过
curl_easy_getinfo()可获取状态码、响应时间等信息。其他可选库
除了libcurl,还有:
- Boost.Beast:基于Boost.Asio,适合需要异步IO的场景,更现代但学习成本高。
- cpp-httplib:一个轻量级的头文件库,仅需包含一个文件即可使用,适合简单项目。
例如使用cpp-httplib的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; }
基本上就这些。对于大多数情况,libcurl足够稳定可靠。若追求简洁,cpp-httplib是不错的选择。根据项目需求选择合适的方式即可。










