Ответы пользователя по тегу Boost
  • Как сделать простой get запрос используя boost?

    @4rtzel
    Пример с использованием Boost.Beast (доступен с 1.66 версии). За основу взял пример отсюда и слегка изменил его.

    #include <boost/beast.hpp>
    #include <boost/asio/connect.hpp>
    #include <boost/asio/ip/tcp.hpp>
    
    namespace http = boost::beast::http;
    
    int main() {
        const std::string host = "scooterlabs.com";
        const std::string target = "/echo?input=test";
    
        // I/O контекст, необходимый для всех I/O операций
        boost::asio::io_context ioc;
    
        // Resolver для определения endpoint'ов
        boost::asio::ip::tcp::resolver resolver(ioc);
        // Tcp сокет, использующейся для соединения
        boost::asio::ip::tcp::socket socket(ioc);
    
        // Резолвим адрес и устанавливаем соединение
        boost::asio::connect(socket, resolver.resolve(host, "80"));
    
        // Дальше необходимо создать HTTP GET реквест с указанием таргета
        http::request<http::string_body> req(http::verb::get, target, 11);
        // Задаём поля HTTP заголовка
        req.set(http::field::host, host);
        req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
        
        // Отправляем реквест через приконекченный сокет
        http::write(socket, req);
    
        // Часть, отвечающая за чтение респонса
        {
            boost::beast::flat_buffer buffer;
            http::response<http::dynamic_body> res;
            http::read(socket, buffer, res);
    
            std::cout << res << std::endl;
        }
        // Закрываем соединение
        socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
    
        return 0;
    }


    Компиляция:
    g++ -lboost_system -pthread main.cpp
    Ответ написан
    7 комментариев