From 01cd68c9a4758064f8ab6a44a5bdc01b6f7797e3 Mon Sep 17 00:00:00 2001 From: mxp Date: Sun, 23 May 2021 14:44:18 +0200 Subject: [PATCH] Add example of reading large response body closes #2240 --- CHANGELOG.md | 4 +++ doc/qbk/04_http/05_parser_streams.qbk | 11 ++++++++ example/doc/http_examples.hpp | 36 +++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e98aa5dd..227bcb54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +* Add example of reading large response body. + +-------------------------------------------------------------------------------- + Version 316: * Disable GHA CI for clang-9. diff --git a/doc/qbk/04_http/05_parser_streams.qbk b/doc/qbk/04_http/05_parser_streams.qbk index e316a38f..82178714 100644 --- a/doc/qbk/04_http/05_parser_streams.qbk +++ b/doc/qbk/04_http/05_parser_streams.qbk @@ -138,4 +138,15 @@ using a small, fixed-size buffer: +[section:read_large_response_body Reading large response body __example__] + +This example presents how to increase the default limit of the response body size, +thus the content larger than the default 8MB can be read. + +[example_read_large_response_body] + +[endsect] + + + [endsect] diff --git a/example/doc/http_examples.hpp b/example/doc/http_examples.hpp index d0b8da7f..d17697a5 100644 --- a/example/doc/http_examples.hpp +++ b/example/doc/http_examples.hpp @@ -902,6 +902,42 @@ read_and_print_body( //] +//------------------------------------------------------------------------------ +// +// Example: Read large response body +// +//------------------------------------------------------------------------------ + +//[example_read_large_response_body + +/* This function uses custom size limit of the resposne body. + The key method is 'body_limit' of the parser. + body_limit is expressed in bytes. +*/ +template< + class SyncReadStream, + class DynamicBuffer, + bool isRequest, class Body, class Allocator> +std::size_t +read_large_response_body( + SyncReadStream& stream, + DynamicBuffer& buffer, + message>& msg, + std::size_t body_limit, + error_code& ec) +{ + parser p(std::move(msg)); + p.eager(true); + p.body_limit(body_limit); + auto const bytes_transferred = + http::read(stream, buffer, p, ec); + if(ec) + return bytes_transferred; + msg = p.release(); + return bytes_transferred; +} + +//] //------------------------------------------------------------------------------ //