使用libcurl库可在C++中发起HTTP请求。首先安装开发库,如Ubuntu下执行sudo apt-get install libcurl4-openssl-dev;然后编写代码,通过curl_easy_init初始化,设置CURLOPT_URL、CURLOPT_WRITEFUNCTION等选项,结合回调函数接收响应数据,执行curl_easy_perform发送GET或POST请求,最后调用curl_easy_cleanup释放资源。示例包含同步GET请求获取数据及POST请求发送JSON内容,适用于跨平台项目,需注意超时设置、HTTPS证书处理及多线程安全。

在C++中发起HTTP请求没有像Python或JavaScript那样的内置支持,但可以通过第三方库来实现。最常用且简单的方法是使用 libcurl,它是一个功能强大、跨平台的网络请求库,支持HTTP、HTTPS等多种协议。
1. 安装并配置 libcurl
在使用之前,需要确保系统中已安装 libcurl 开发库。
Ubuntu/Debian:
sudo apt-get install libcurl4-openssl-dev
CentOS/RHEL:
sudo yum install curl-devel
Windows(使用vcpkg):
立即学习“C++免费学习笔记(深入)”;
vcpkg install curl
2. 基本的HTTP GET请求示例
以下是一个使用 libcurl 发起同步HTTP GET请求的完整示例:
#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 = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://httpbin.org/get"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); // 超时10秒 // 执行请求 res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cerr << "请求失败: " << curl_easy_strerror(res) << std::endl; } else { std::cout << "响应内容:n" << readBuffer << std::endl; } // 清理 curl_easy_cleanup(curl); } else { std::cerr << "curl初始化失败" << std::endl; } return 0;}
3. 编译方法
保存为 http_request.cpp,然后编译:
g++ http_request.cpp -o http_request -lcurl
运行:
./http_request
4. 发起POST请求示例
发送JSON数据到服务器:
#include #include #include size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { output->append((char*)contents, size * nmemb); return size * nmemb;}int main() { CURL* curl; CURLcode res; std::string readBuffer; std::string postData = R"({"name": "张三", "age": 25})"; curl = curl_easy_init(); if (curl) { struct curl_slist* headers = nullptr; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_URL, "https://httpbin.org/post"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData.c_str()); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, postData.length()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cerr << "POST请求失败: " << curl_easy_strerror(res) << std::endl; } else { std::cout << "POST响应:n" << readBuffer << std::endl; } curl_slist_free_all(headers); curl_easy_cleanup(curl); } return 0;}
5. 注意事项
使用 libcurl 时需注意以下几点:
每次使用后调用 curl_easy_cleanup 避免资源泄漏设置超时时间防止程序卡死处理 HTTPS 时可能需要设置 CA 证书路径(或跳过验证,仅用于测试)多线程环境下每个线程应使用独立的 CURL* 句柄
基本上就这些。libcurl 是C++中最稳定可靠的HTTP请求方案之一,适合大多数项目需求。
以上就是c++怎么发起一个HTTP请求_c++ HTTP请求实现方法示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1479949.html
微信扫一扫
支付宝扫一扫