C++中发送HTTP请求需借助第三方库,常用方法包括使用cURL发送GET和POST请求,通过设置CURLOPT_URL、CURLOPT_POSTFIELDS等选项并配合回调函数处理响应;也可采用Boost.Beast实现同步或异步HTTP通信,利用asio进行TCP连接,构造http::request并发送,适用于现代C++项目。推荐简单场景使用cURL,高性能需求选择Boost.Beast,注意处理网络错误与请求头设置。

在C++中发送HTTP GET和POST请求,由于标准库不直接支持网络通信,通常需要借助第三方库来实现。以下是几种常用且跨平台的方法,帮助你快速完成HTTP请求操作。
使用cURL库发送GET请求
cURL是一个功能强大的开源库,支持多种协议,包括HTTP/HTTPS。要使用它发送GET请求,首先安装libcurl开发包(如Ubuntu下执行sudo apt-get install libcurl4-openssl-dev)。
示例代码:
#include
#include
#include
// 回调函数:接收响应数据
static 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://httpbin.org/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::cerr << "请求失败: " << curl_easy_strerror(res) << std::endl;
} else {
std::cout << "响应内容:n" << readBuffer << std::endl;
}
curl_easy_cleanup(curl);
}
return 0;
}
立即学习“C++免费学习笔记(深入)”;
编译时需链接cURL:
g++ -o http_get http_get.cpp -lcurl
使用cURL发送POST请求
发送POST请求只需设置CURLOPT_POST选项,并传入数据。
示例:
#include
#include
#include
static 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 = "name=John&age=30";
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://httpbin.org/post");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
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_easy_cleanup(curl);
}
return 0;
}
使用Boost.Beast(基于Asio)实现HTTP客户端
如果你偏好现代C++风格且无需额外依赖cURL,可以使用Boost.Beast。它提供对HTTP协议的原生支持,适合异步或同步场景。
你需要安装Boost库(包含Boost.Asio和Boost.Beast)。
同步GET请求示例:
#include
#include
#include
#include
#include
#include
#include
#include
namespace beast = boost::beast;
namespace http = beast::http;
namespace net = boost::asio;
using tcp = net::ip::tcp;
void httpGet(const std::string& host, const std::string& target) {
net::io_context ioc;
tcp::resolver resolver(ioc);
beast::tcp_stream stream(ioc);
auto const results = resolver.resolve(host, "http");
stream.connect(results);
http::request req{http::verb::get, target, 11};
req.set(http::field::host, host);
req.set(http::field::user_agent, "Beast");
http::write(stream, req);
beast::flat_buffer buffer;
http::response res;
http::read(stream, buffer, res);
std::cout << res << std::endl;
beast::error_code ec;
stream.socket().shutdown(tcp::socket::shutdown_both, ec);
}
int main() {
try {
httpGet("httpbin.org", "/get");
} catch(std::exception const& e) {
std::cerr << "Error: " << e.what() << std::endl;
return EXIT_FAILURE;
}
return 0;
}
编译命令(假设Boost已安装):
g++ -o http_beast http_beast.cpp -lboost_system
选择建议与注意事项
根据项目需求选择合适方案:
简单项目推荐cURL:成熟稳定,文档丰富,支持HTTPS、Cookie、代理等高级功能。现代C++项目可选Boost.Beast:无外部依赖(除Boost),支持异步,性能高,但学习曲线略陡。确保处理异常和网络错误,比如连接超时、DNS解析失败等。若发送JSON数据,在POST中设置Content-Type头为application/json。
基本上就这些,掌握一种方法即可应对大多数HTTP通信需求。
以上就是c++++如何发送HTTP GET和POST请求_c++ HTTP GET/POST请求方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477907.html
微信扫一扫
支付宝扫一扫