// Copyright 2017 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include #include #include #include #include #include "Common/CommonTypes.h" namespace Common { class HttpRequest final { public: enum class AllowedReturnCodes : u8 { Ok_Only, All }; // Return false to abort the request using ProgressCallback = std::function; explicit HttpRequest(std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{3000}, ProgressCallback callback = nullptr); ~HttpRequest(); bool IsValid() const; using Response = std::optional>; using Headers = std::map>; struct Multiform { std::string name; std::string data; }; void SetCookies(const std::string& cookies); void UseIPv4(); void FollowRedirects(long max = 1); s32 GetLastResponseCode() const; std::string EscapeComponent(const std::string& string); std::string GetHeaderValue(std::string_view name) const; Response Get(const std::string& url, const Headers& headers = {}, AllowedReturnCodes codes = AllowedReturnCodes::Ok_Only); Response Post(const std::string& url, const std::vector& payload, const Headers& headers = {}, AllowedReturnCodes codes = AllowedReturnCodes::Ok_Only); Response Post(const std::string& url, const std::string& payload, const Headers& headers = {}, AllowedReturnCodes codes = AllowedReturnCodes::Ok_Only); Response PostMultiform(const std::string& url, std::span multiform, const Headers& headers = {}, AllowedReturnCodes codes = AllowedReturnCodes::Ok_Only); private: class Impl; std::unique_ptr m_impl; }; } // namespace Common