10#include <userver/clients/dns/resolver_fwd.hpp>
11#include <userver/clients/http/error.hpp>
12#include <userver/clients/http/plugin.hpp>
13#include <userver/clients/http/response.hpp>
14#include <userver/clients/http/response_future.hpp>
15#include <userver/concurrent/queue.hpp>
16#include <userver/crypto/certificate.hpp>
17#include <userver/crypto/private_key.hpp>
18#include <userver/utils/impl/source_location.hpp>
20USERVER_NAMESPACE_BEGIN
26namespace server::http {
27class HeadersPropagator;
31namespace clients::
http {
34class StreamedResponse;
39class DestinationStatistics;
40struct TestsuiteConfig;
47enum class HttpMethod { kGet, kPost, kHead, kPut, kDelete, kPatch, kOptions };
49std::string_view ToStringView(HttpMethod method);
84ProxyAuthType ProxyAuthTypeFromString(
const std::string& auth_name);
91 std::unordered_map<std::string, std::string, utils::StrCaseHash>;
95 explicit Request(impl::EasyWrapper&&, RequestStats&& req_stats,
96 const std::shared_ptr<DestinationStatistics>& dest_stats,
97 clients::dns::Resolver* resolver,
98 impl::PluginPipeline& plugin_pipeline,
109 Request&
get(
const std::string& url) &;
110 Request get(
const std::string& url) &&;
115 Request&
head(
const std::string& url) &;
116 Request head(
const std::string& url) &&;
121 Request&
post(
const std::string& url, std::string data = {}) &;
122 Request post(
const std::string& url, std::string data = {}) &&;
124 Request&
post(
const std::string& url, Form&& form) &;
125 Request post(
const std::string& url, Form&& form) &&;
130 Request&
put(
const std::string& url, std::string data = {}) &;
131 Request put(
const std::string& url, std::string data = {}) &&;
137 Request&
patch(
const std::string& url, std::string data = {}) &;
138 Request patch(
const std::string& url, std::string data = {}) &&;
142 Request delete_method() &&;
145 Request delete_method(
const std::string& url) &&;
148 Request delete_method(
const std::string& url, std::string data) &&;
152 Request set_custom_http_request_method(std::string method) &&;
155 Request&
url(
const std::string& url) &;
156 Request url(
const std::string& url) &&;
158 Request&
data(std::string data) &;
159 Request data(std::string data) &&;
162 Request form(Form&& form) &&;
165 Request headers(
const Headers& headers) &&;
168 std::pair<std::string_view, std::string_view>>& headers) &;
169 Request headers(
const std::initializer_list<
170 std::pair<std::string_view, std::string_view>>& headers) &&;
173 std::string_view user, std::string_view password) &;
174 Request http_auth_type(
HttpAuthType value,
bool auth_only,
175 std::string_view user, std::string_view password) &&;
178 Request proxy_headers(
const Headers& headers) &&;
181 const std::initializer_list<
182 std::pair<std::string_view, std::string_view>>& headers) &;
183 Request proxy_headers(
184 const std::initializer_list<
185 std::pair<std::string_view, std::string_view>>& headers) &&;
188 Request user_agent(
const std::string& value) &&;
190 Request&
proxy(
const std::string& value) &;
191 Request proxy(
const std::string& value) &&;
197 Request cookies(
const Cookies& cookies) &&;
200 const std::unordered_map<std::string, std::string>& cookies) &;
202 const std::unordered_map<std::string, std::string>& cookies) &&;
205 Request follow_redirects(
bool follow =
true) &&;
208 Request timeout(
long timeout_ms) &&;
209 Request& timeout(std::chrono::milliseconds timeout_ms) & {
210 return timeout(timeout_ms.count());
212 Request timeout(std::chrono::milliseconds timeout_ms) && {
213 return std::move(
this->timeout(timeout_ms.count()));
217 Request verify(
bool verify =
true) &&;
219 Request&
ca_info(
const std::string& file_path) &;
220 Request ca_info(
const std::string& file_path) &&;
226 Request crl_file(
const std::string& file_path) &&;
243 Request&
retry(
short retries = 3,
bool on_fails =
true) &;
244 Request retry(
short retries = 3,
bool on_fails =
true) &&;
250 Request unix_socket_path(
const std::string& path) &&;
254 Request use_ipv4() &&;
257 Request use_ipv6() &&;
262 Request connect_to(
const ConnectTo& connect_to) &&;
264 template <
typename T>
265 std::enable_if_t<std::is_same_v<ConnectTo, T>, Request&> connect_to(T&&) {
268 "ConnectTo argument must not be temporary, it must outlive Request");
276 Request SetLoggedUrl(std::string url) &&;
282 Request SetDestinationMetricName(
const std::string& destination) &&;
286 void SetTestsuiteConfig(
287 const std::shared_ptr<
const TestsuiteConfig>& config) &;
289 void SetAllowedUrlsExtra(
const std::vector<std::string>& urls) &;
292 void SetDeadlinePropagationConfig(
295 void SetHeadersPropagator(
const server::http::HeadersPropagator*) &;
301 Request DisableReplyDecoding() &&;
303 void SetCancellationPolicy(CancellationPolicy cp);
320 utils::impl::SourceLocation location =
329 const std::shared_ptr<
concurrent::StringStreamQueue>& queue,
330 utils::impl::SourceLocation location =
340 [[nodiscard]] std::shared_ptr<Response>
perform(
341 utils::impl::SourceLocation location =
346 const std::string& GetUrl() && =
delete;
350 const std::string& GetData() && =
delete;
356 std::shared_ptr<RequestState> pimpl_;