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; +} + +//] //------------------------------------------------------------------------------ //