以下是使用asio库创建HTTP GET请求,并接收返回数据的示例代码:

#include <iostream>
#include <asio.hpp>

using asio::ip::tcp;

int main() {
    try {
        asio::io_context io_context;
        
        // 1. 解析主机名和端口号
        tcp::resolver resolver(io_context);
        tcp::resolver::results_type endpoints = resolver.resolve("fangke.zstu.edu.cn", "6007");

        // 2. 创建socket连接
        tcp::socket socket(io_context);
        asio::connect(socket, endpoints);

        // 3. 发送GET请求
        asio::streambuf request;
        std::ostream request_stream(&request);
        request_stream << "GET /swagger HTTP/1.1\r\n";
        request_stream << "Host: fangke.zstu.edu.cn:6007\r\n";
        request_stream << "Connection: close\r\n\r\n";

        asio::write(socket, request);

        // 4. 接收响应
        asio::streambuf response;
        asio::read_until(socket, response, "\r\n");

        // 5. 输出响应头
        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";

        // 6. 输出响应正文
        asio::read_until(socket, response, "\r\n\r\n");
        std::string header;
        while (std::getline(response_stream, header) && header != "\r") {}
        std::cout << "\n";
        if (response.size() > 0) {
            std::cout << &response;
        }

        return 0;
    }
    catch (std::exception& e) {
        std::cout << "Exception: " << e.what() << "\n";
        return 1;
    }
}

这段代码使用了asio库中的tcp::resolver、tcp::socket、asio::streambuf等类以及相应的成员函数来完成GET请求的发送和响应的接收。其中,第1步使用tcp::resolver类解析指定主机名和端口号,第2步使用tcp::socket类创建socket连接,第3步使用asio::write函数发送GET请求,第4步使用asio::read_until函数接收响应,第5步解析响应头并输出响应状态码,第6步输出响应正文。

如何用asio创建一个httpfangkezstueducn6007swagger的GET请求并且接受返回的数据

原文地址: https://www.cveoy.top/t/topic/byay 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录