увеличить сообщение зверя с body_limit

Моя отправная точка состоит в том, чтобы создать простой код загрузчика из примера надстройки http_client_async. повысить http_client_async. В этом сценарии я хочу записать полученное тело в файл.

Поэтому я обменял тело строки на file_body, чтобы записать полученные данные:

 http::response_parser<http::file_body> res_;

И просто переписал метод on_write, чтобы

void on_write( boost::system::error_code ec,
std::size_t bytes_transferred )
{
boost::ignore_unused(bytes_transferred);

if(ec)
return fail(ec, "write");

boost::system::error_code ec_file;
res_.body().open("myTest.txt", boost::beast::file_mode::write, ec_file);

// test for ec_file missing

// Receive the HTTP response
http::async_read(socket_, buffer_, res_,
std::bind(
&session::on_read,
shared_from_this(),
std::placeholders::_1,
std::placeholders::_2));
}

Итак, но сейчас некоторые из полученных тел данных слишком велики:

read: body limit exceeded

и я пытаюсь увеличить лимит тела.

В случае использования синтаксический анализатор вместо сообщение, ограничение размера запрашиваемого тела может быть изменено с помощью body_limit() метод.

Есть ли простой способ увеличить предел размера тела от сообщение также?

2

Решение

HTTP-интерфейсы Beast сгруппированы в слои. Первый уровень имеет алгоритмы потоков, ориентированные на сообщения, которые работают с контейнером сообщений HTTP. Они разработаны для простоты, но допускают очень небольшую настройку. Следующий уровень — интерфейс, ориентированный на сериализатор / парсер. Это требует поддержания времени жизни сериализатора (для записи) или парсера (для чтения) на время операции потока. Это немного сложнее, но, соответственно, позволяет больше настроек.

Настройка максимального размера тела сообщения требует использования парсер-ориентированного интерфейса, как вы отметили в своем комментарии:

namespace http = boost::beast::http;
http::response_parser<http::file_body> parser;

// Allow for an unlimited body size
parser.body_limit((std::numeric_limits<std::uint64_t>::max)());
...
http::read(socket, buffer, parser);
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector