Исходник http_message_handler (Parser & builder for HTTP's)

Receiver

🥩 Передай meat, всё в скип, я в темпе
Автор темы
Проверенный
597
819
Описание: Удобный C++ враппер, парсер и билдер для HTTP сообщений. Использует библиотеку http-parser для парсинга. Я устанавливал через vcpkg, вы можете собрать сами. Работа с net::http::response аналогична работе с net::http::request. Если в запросе не будет тела, то спарсятся только start line + заголовки. Можно использовать вместе с http_url_handler. В этой библиотеке есть 4 класса:
  1. net::http::request - отвечает за парсинг и билдинг запросов,
  2. net::http::response - отвечает за парсинг и билдинг ответов,
  3. net::http::headers_body - класс нужен только для наследования, содержит работу с заголовками и телом запроса,
  4. net::http::message_parser - отвечает только за парсинг запросов и ответов, минимально использует память,


Парсинг сообщений:
C++:
std::string request_str{R"(GET /path HTTP/1.1
Content-Length: 16
Content-Type: application/json
User-Agent: test-user-agent

{"key": "value"})"}; // Записываем HTTP сообщение в строку

net::http::request request{request_str}; // Парсим сообщение в качестве запроса
std::cout << request.str() << std::endl; // Билдим сообщение и выводим

Билдинг сообщений с нуля:
C++:
std::string body{R"({"key": "value"})"}; // Записываем тело в строку

net::http::request request{}; // Создаём пустой объект
request.version("1.1"); // Заполняем объект значениями
request.method(net::http::method::GET);
request.target("/path");
request.headers(
    net::http::headers_t{{"Content-Length", std::to_string(body.size())},
                         {"Content-Type", "applicaton/json"},
                         {"User-Agent", "test-user-agent"}});
request.body({body.begin(), body.end()});
std::cout << request.str() << std::endl; // Билдим сообщение и выводим

Репозиторий (Исходник):
 
Последнее редактирование:
  • Нравится
Реакции: Z3roKwq и Dmitry Code