@@ -639,7 +639,7 @@ class Server {
639639 Headers headers = Headers());
640640 bool remove_mount_point (const char *mount_point);
641641 Server &set_file_extension_and_mimetype_mapping (const char *ext,
642- const char *mime);
642+ const char *mime);
643643 Server &set_file_request_handler (Handler handler);
644644
645645 Server &set_error_handler (HandlerWithReturn handler);
@@ -835,6 +835,14 @@ class ClientImpl {
835835 ResponseHandler response_handler, ContentReceiver content_receiver,
836836 Progress progress);
837837
838+ Result Get (const char *path, const Params ¶ms, const Headers &headers,
839+ Progress progress = nullptr );
840+ Result Get (const char *path, const Params ¶ms, const Headers &headers,
841+ ContentReceiver content_receiver, Progress progress = nullptr );
842+ Result Get (const char *path, const Params ¶ms, const Headers &headers,
843+ ResponseHandler response_handler, ContentReceiver content_receiver,
844+ Progress progress = nullptr );
845+
838846 Result Head (const char *path);
839847 Result Head (const char *path, const Headers &headers);
840848
@@ -1128,6 +1136,14 @@ class Client {
11281136 Result Get (const char *path, ResponseHandler response_handler,
11291137 ContentReceiver content_receiver, Progress progress);
11301138
1139+ Result Get (const char *path, const Params ¶ms, const Headers &headers,
1140+ Progress progress = nullptr );
1141+ Result Get (const char *path, const Params ¶ms, const Headers &headers,
1142+ ContentReceiver content_receiver, Progress progress = nullptr );
1143+ Result Get (const char *path, const Params ¶ms, const Headers &headers,
1144+ ResponseHandler response_handler, ContentReceiver content_receiver,
1145+ Progress progress = nullptr );
1146+
11311147 Result Head (const char *path);
11321148 Result Head (const char *path, const Headers &headers);
11331149
@@ -3125,6 +3141,14 @@ inline std::string params_to_query_str(const Params ¶ms) {
31253141 return query;
31263142}
31273143
3144+ inline std::string append_query_params (const char *path, const Params ¶ms) {
3145+ std::string path_with_query = path;
3146+ const static std::regex re (" [^?]+\\ ?.*" );
3147+ auto delm = std::regex_match (path, re) ? ' &' : ' ?' ;
3148+ path_with_query += delm + params_to_query_str (params);
3149+ return path_with_query;
3150+ }
3151+
31283152inline void parse_query_text (const std::string &s, Params ¶ms) {
31293153 split (s.data (), s.data () + s.size (), ' &' , [&](const char *b, const char *e) {
31303154 std::string key;
@@ -4222,8 +4246,9 @@ inline bool Server::remove_mount_point(const char *mount_point) {
42224246 return false ;
42234247}
42244248
4225- inline Server &Server::set_file_extension_and_mimetype_mapping (const char *ext,
4226- const char *mime) {
4249+ inline Server &
4250+ Server::set_file_extension_and_mimetype_mapping (const char *ext,
4251+ const char *mime) {
42274252 file_extension_and_mimetype_map_[ext] = mime;
42284253
42294254 return *this ;
@@ -4264,8 +4289,8 @@ inline Server &Server::set_logger(Logger logger) {
42644289 return *this ;
42654290}
42664291
4267- inline Server
4268- & Server::set_expect_100_continue_handler (Expect100ContinueHandler handler) {
4292+ inline Server &
4293+ Server::set_expect_100_continue_handler (Expect100ContinueHandler handler) {
42694294 expect_100_continue_handler_ = std::move (handler);
42704295
42714296 return *this ;
@@ -5796,6 +5821,35 @@ inline Result ClientImpl::Get(const char *path, const Headers &headers,
57965821 return send (req);
57975822}
57985823
5824+ inline Result ClientImpl::Get (const char *path, const Params ¶ms,
5825+ const Headers &headers, Progress progress) {
5826+ if (params.empty ()) { return Get (path, headers); }
5827+
5828+ std::string path_with_query = detail::append_query_params (path, params);
5829+ return Get (path_with_query.c_str (), headers, progress);
5830+ }
5831+
5832+ inline Result ClientImpl::Get (const char *path, const Params ¶ms,
5833+ const Headers &headers,
5834+ ContentReceiver content_receiver,
5835+ Progress progress) {
5836+ return Get (path, params, headers, nullptr , content_receiver, progress);
5837+ }
5838+
5839+ inline Result ClientImpl::Get (const char *path, const Params ¶ms,
5840+ const Headers &headers,
5841+ ResponseHandler response_handler,
5842+ ContentReceiver content_receiver,
5843+ Progress progress) {
5844+ if (params.empty ()) {
5845+ return Get (path, headers, response_handler, content_receiver, progress);
5846+ }
5847+
5848+ std::string path_with_query = detail::append_query_params (path, params);
5849+ return Get (path_with_query.c_str (), params, headers, response_handler,
5850+ content_receiver, progress);
5851+ }
5852+
57995853inline Result ClientImpl::Head (const char *path) {
58005854 return Head (path, Headers ());
58015855}
@@ -7020,6 +7074,22 @@ inline Result Client::Get(const char *path, const Headers &headers,
70207074 return cli_->Get (path, headers, std::move (response_handler),
70217075 std::move (content_receiver), std::move (progress));
70227076}
7077+ inline Result Client::Get (const char *path, const Params ¶ms,
7078+ const Headers &headers, Progress progress) {
7079+ return cli_->Get (path, params, headers, progress);
7080+ }
7081+ inline Result Client::Get (const char *path, const Params ¶ms,
7082+ const Headers &headers,
7083+ ContentReceiver content_receiver, Progress progress) {
7084+ return cli_->Get (path, params, headers, content_receiver, progress);
7085+ }
7086+ inline Result Client::Get (const char *path, const Params ¶ms,
7087+ const Headers &headers,
7088+ ResponseHandler response_handler,
7089+ ContentReceiver content_receiver, Progress progress) {
7090+ return cli_->Get (path, params, headers, response_handler, content_receiver,
7091+ progress);
7092+ }
70237093
70247094inline Result Client::Head (const char *path) { return cli_->Head (path); }
70257095inline Result Client::Head (const char *path, const Headers &headers) {
0 commit comments