Задать вопрос
mrjbom
@mrjbom

Как сделать простой get запрос используя boost?

Меня интересует создание программы которая просто напросто отправит get запрос такова типа
example.com/api.php?input=test по http протоколу и всё, не нужно получать ответ или делать что-то ещё. Всё просто. Буду очень если будет рабочий код и с объяснением.
А конкретно на так ahri9fox.online/apiapp.php?input=a
  • Вопрос задан
  • 6175 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 1
@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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы