#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;
int main() {
try {
// 创建io_context对象,它是所有I/O操作的核心
boost::asio::io_context io_context;
// 解析服务器地址和端口
tcp::resolver resolver(io_context);
tcp::resolver::results_type endpoints = resolver.resolve("example.com", "http");
// 创建并连接到服务器的socket
tcp::socket socket(io_context);
boost::asio::connect(socket, endpoints);
// 发送HTTP请求
const std::string request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
boost::asio::write(socket, boost::asio::buffer(request));
// 接收响应
boost::asio::streambuf response;
boost::asio::read_until(socket, response, "\r\n");
// 解析响应头
std::istream response_stream(&response);
std::string http_version;
response_stream >> http_version;
unsigned int status_code;
response_stream >> status_code;
std::string status_message;
std::getline(response_stream, status_message);
// 打印响应头信息
std::cout << "Response from server:\n";
std::cout << "HTTP version: " << http_version << "\n";
std::cout << "Status code: " << status_code << "\n";
std::cout << "Status message: " << status_message << "\n";
// 读取剩余的响应内容
std::string header;
while (std::getline(response_stream, header) && header != "\r") {
std::cout << header << "\n";
}
std::cout << "\n";
// 将剩余的数据从streambuf写入到文件或字符串中
std::string body;
while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error)) {
body += std::string(boost::asio::buffers_begin(response.data()), boost::asio::buffers_end(response.data()));
}
// 打印响应体
std::cout << body << "\n";
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
引入必要的库:
#include <boost/asio.hpp>
:引入Boost.Asio库,用于网络通信。#include <iostream>
:引入标准输入输出流库。创建io_context对象:
boost::asio::io_context io_context;
:创建一个io_context
对象,它是所有I/O操作的核心,负责管理异步操作。解析服务器地址和端口:
tcp::resolver
解析目标服务器的地址和端口。这里我们解析的是example.com
的HTTP服务(端口80)。创建并连接到服务器的socket:
boost::asio::connect
函数连接到解析得到的服务器地址。发送HTTP请求:
boost::asio::write
函数将其发送到服务器。接收响应:
boost::asio::read_until
读取响应直到遇到换行符\r\n
,表示响应头结束。异常处理:
try-catch
块捕获并处理可能发生的异常,确保程序在出错时能够正确处理并输出错误信息。这个示例展示了如何使用Boost.Asio库进行基本的HTTP客户端编程,包括建立连接、发送请求和接收响应。
上一篇:c++开发
下一篇:sort函数c++用法
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站