C++如何联网向服务端发出请求
时间: 2024-06-08 12:06:04 浏览: 14
在 C++ 中,可以使用网络编程库(如 Boost.Asio、Winsock 或 BSD socket)来实现与服务端的网络通信。下面是一个使用 Boost.Asio 库向服务端发起 HTTP 请求的示例代码:
```c++
#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;
int main() {
try {
// 创建 I/O 上下文
boost::asio::io_context io_context;
// 创建一个 TCP socket
tcp::socket socket(io_context);
// 解析主机名和服务名
tcp::resolver resolver(io_context);
tcp::resolver::results_type endpoints = resolver.resolve("www.example.com", "http");
// 连接到服务端
boost::asio::connect(socket, endpoints);
// 构造 HTTP 请求
std::string request = "GET / HTTP/1.1\r\nHost: www.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);
if (!response_stream || http_version.substr(0, 5) != "HTTP/") {
std::cout << "Invalid response\n";
return 1;
}
if (status_code != 200) {
std::cout << "Response returned with status code " << status_code << "\n";
return 1;
}
std::cout << "Response status code: " << status_code << "\n";
std::cout << "Response status message: " << status_message << "\n";
// 输出响应体
boost::asio::read_until(socket, response, "\r\n\r\n");
std::string header;
while (std::getline(response_stream, header) && header != "\r") {}
std::cout << &response;
// 关闭 socket
boost::system::error_code error;
socket.shutdown(tcp::socket::shutdown_both, error);
socket.close();
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
```
该示例使用 Boost.Asio 库实现了向 www.example.com 发起 HTTP 请求的功能。在实际使用中,需要根据具体的需求进行修改。