9#include <unordered_map>
12#include <userver/http/header_map.hpp>
13#include <userver/logging/log_helper_fwd.hpp>
14#include <userver/server/http/form_data_arg.hpp>
15#include <userver/server/http/http_method.hpp>
16#include <userver/server/http/http_response.hpp>
17#include <userver/utils/impl/projecting_view.hpp>
18#include <userver/utils/str_icase.hpp>
20USERVER_NAMESPACE_BEGIN
27namespace server::handlers {
32namespace server::http {
37class HttpRequest
final {
39 using HeadersMap = USERVER_NAMESPACE::http::
headers::HeaderMap;
41 using HeadersMapKeys =
decltype(utils::impl::MakeKeysView(HeadersMap()));
44 std::unordered_map<std::string, std::string, utils::StrCaseHash>;
46 using CookiesMapKeys =
decltype(utils::impl::MakeKeysView(CookiesMap()));
49 explicit HttpRequest(HttpRequestImpl& impl);
50 ~HttpRequest() =
default;
60 const std::string& GetMethodStr()
const;
78 std::chrono::duration<
double> GetRequestTime()
const;
79 std::chrono::duration<
double> GetResponseTime()
const;
92 const std::string&
GetArg(std::string_view arg_name)
const;
111 bool HasArg(std::string_view arg_name)
const;
146 const std::string&
GetPathArg(std::string_view arg_name)
const;
165 const std::string&
GetHeader(std::string_view header_name)
const;
168 const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
170 const HeadersMap& GetHeaders()
const;
189 const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name);
193 const std::string&
GetCookie(
const std::string& cookie_name)
const;
215 void SetRequestBody(std::string body);
216 void ParseArgsFromBody();
218 std::chrono::steady_clock::time_point GetStartTime()
const;
230 void SetUpgradeWebsocket(
231 std::function<
void(std::unique_ptr<engine::io::RwBase>&&,
232 engine::
io::Sockaddr&&)>
234 void DoUpgrade(std::unique_ptr<engine::io::RwBase>&&,
235 engine::
io::Sockaddr&& peer_name)
const;
241 HttpRequestImpl& impl_;