Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
RequestBuilder.hpp
1#pragma once
2
3#include "util/log/Logger.hpp"
4#include "util/requests/Types.hpp"
5
6#include <boost/asio/spawn.hpp>
7#include <boost/asio/ssl/context.hpp>
8#include <boost/beast.hpp>
9#include <boost/beast/core/error.hpp>
10#include <boost/beast/http/field.hpp>
11#include <boost/beast/http/message.hpp>
12#include <boost/beast/http/string_body.hpp>
13#include <boost/beast/http/verb.hpp>
14
15#include <chrono>
16#include <expected>
17#include <string>
18#include <string_view>
19#include <vector>
20
21namespace util::requests {
22
27 util::Logger log_{"RequestBuilder"};
28 std::string host_;
29 std::string port_;
30 std::chrono::milliseconds timeout_{kDEFAULT_TIMEOUT};
31 boost::beast::http::request<boost::beast::http::string_body> request_;
32
33public:
40 RequestBuilder(std::string host, std::string port);
41
49 addHeader(HttpHeader const& header);
50
58 addHeaders(std::vector<HttpHeader> const& headers);
59
67 addData(std::string data);
68
78 setTimeout(std::chrono::milliseconds timeout);
79
89 setTarget(std::string_view target);
90
101 std::expected<std::string, RequestError>
102 getSsl(boost::asio::yield_context yield);
103
114 std::expected<std::string, RequestError>
115 getPlain(boost::asio::yield_context yield);
116
128 std::expected<std::string, RequestError>
129 get(boost::asio::yield_context yield);
130
141 std::expected<std::string, RequestError>
142 postSsl(boost::asio::yield_context yield);
143
154 std::expected<std::string, RequestError>
155 postPlain(boost::asio::yield_context yield);
156
168 std::expected<std::string, RequestError>
169 post(boost::asio::yield_context yield);
170
171 static constexpr std::chrono::milliseconds kDEFAULT_TIMEOUT{
172 30000
173 };
174
175private:
176 std::expected<std::string, RequestError>
177 doSslRequest(boost::asio::yield_context yield, boost::beast::http::verb method);
178
179 std::expected<std::string, RequestError>
180 doPlainRequest(boost::asio::yield_context yield, boost::beast::http::verb method);
181
182 std::expected<std::string, RequestError>
183 doRequest(boost::asio::yield_context yield, boost::beast::http::verb method);
184
185 template <typename StreamDataType>
186 std::expected<std::string, RequestError>
187 doRequestImpl(
188 StreamDataType&& streamData,
189 boost::asio::yield_context yield,
190 boost::beast::http::verb method
191 );
192};
193
194} // namespace util::requests
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:77
static constexpr std::chrono::milliseconds kDEFAULT_TIMEOUT
Definition RequestBuilder.hpp:171
RequestBuilder & addHeaders(std::vector< HttpHeader > const &headers)
Add headers to the request.
Definition RequestBuilder.cpp:52
std::expected< std::string, RequestError > get(boost::asio::yield_context yield)
Perform a GET request asynchronously. The SSL will be used first, if it fails, the plain connection w...
Definition RequestBuilder.cpp:94
std::expected< std::string, RequestError > postSsl(boost::asio::yield_context yield)
Perform a POST request with SSL asynchronously.
Definition RequestBuilder.cpp:100
RequestBuilder & addHeader(HttpHeader const &header)
Add a header to the request.
Definition RequestBuilder.cpp:45
std::expected< std::string, RequestError > postPlain(boost::asio::yield_context yield)
Perform a POST request without SSL asynchronously.
Definition RequestBuilder.cpp:106
std::expected< std::string, RequestError > getPlain(boost::asio::yield_context yield)
Perform a GET request without SSL asynchronously.
Definition RequestBuilder.cpp:88
std::expected< std::string, RequestError > getSsl(boost::asio::yield_context yield)
Perform a GET request with SSL asynchronously.
Definition RequestBuilder.cpp:82
RequestBuilder(std::string host, std::string port)
Construct a new Request Builder object.
Definition RequestBuilder.cpp:37
std::expected< std::string, RequestError > post(boost::asio::yield_context yield)
Perform a POST request asynchronously. The SSL will be used first, if it fails, the plain connection ...
Definition RequestBuilder.cpp:112
RequestBuilder & addData(std::string data)
Add body or data to the request.
Definition RequestBuilder.cpp:60
RequestBuilder & setTimeout(std::chrono::milliseconds timeout)
Set the timeout for the request.
Definition RequestBuilder.cpp:68
RequestBuilder & setTarget(std::string_view target)
Set the target for the request.
Definition RequestBuilder.cpp:75
This namespace implements the data access layer and related components.
Definition AmendmentCenter.cpp:56
HTTP header.
Definition Types.hpp:51