kalshi-cpp 0.6.2
C++23 client for Kalshi's Predictions API
Loading...
Searching...
No Matches
http_client.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "kalshi/error.hpp"
5#include "kalshi/signer.hpp"
6
7#include <chrono>
8#include <cstdint>
9#include <memory>
10#include <optional>
11#include <string>
12#include <string_view>
13#include <utility>
14#include <vector>
15
16namespace kalshi {
17
20enum class HttpMethod : std::uint8_t { GET, POST, PUT, DEL };
21
22[[nodiscard]] constexpr std::string_view to_string(HttpMethod method) noexcept {
23 switch (method) {
24 case HttpMethod::GET:
25 return "GET";
27 return "POST";
28 case HttpMethod::PUT:
29 return "PUT";
30 case HttpMethod::DEL:
31 return "DELETE";
32 }
33 return "GET";
34}
35
38 std::string body;
39 std::vector<std::pair<std::string, std::string>> headers;
40
42 [[nodiscard]] std::optional<std::string_view> header(std::string_view name) const noexcept;
43};
44
49 std::chrono::milliseconds timeout{std::chrono::seconds{30}};
50 std::chrono::milliseconds connect_timeout{std::chrono::seconds{10}};
51 bool verify_ssl{true};
52
53 [[nodiscard]] static ClientConfig for_environment(Environment environment) {
54 ClientConfig config;
55 config.base_url = std::string(rest_base_url(environment));
56 return config;
57 }
58};
59
63public:
64 virtual ~HttpTransport() = default;
65
67 [[nodiscard]] virtual Result<HttpResponse> request(HttpMethod method, std::string_view path,
68 std::string_view body = {}) const = 0;
69
70 [[nodiscard]] Result<HttpResponse> get(std::string_view path) const {
71 return request(HttpMethod::GET, path);
72 }
73 [[nodiscard]] Result<HttpResponse> post(std::string_view path,
74 std::string_view body = {}) const {
75 return request(HttpMethod::POST, path, body);
76 }
77 [[nodiscard]] Result<HttpResponse> put(std::string_view path,
78 std::string_view body = {}) const {
79 return request(HttpMethod::PUT, path, body);
80 }
81 [[nodiscard]] Result<HttpResponse> del(std::string_view path,
82 std::string_view body = {}) const {
83 return request(HttpMethod::DEL, path, body);
84 }
85};
86
93class HttpClient final : public HttpTransport {
94public:
95 explicit HttpClient(Signer signer, ClientConfig config = {});
97 ~HttpClient() override;
98
100 HttpClient& operator=(HttpClient&&) noexcept;
101 HttpClient(const HttpClient&) = delete;
102 HttpClient& operator=(const HttpClient&) = delete;
103
104 using HttpTransport::del;
105 using HttpTransport::get;
106 using HttpTransport::post;
107 using HttpTransport::put;
108
109 [[nodiscard]] Result<HttpResponse> request(HttpMethod method, std::string_view path,
110 std::string_view body = {}) const override;
111
112 [[nodiscard]] const ClientConfig& config() const noexcept;
113
114private:
115 struct Impl;
116 std::unique_ptr<Impl> impl_;
117};
118
119} // namespace kalshi
libcurl transport.
Definition http_client.hpp:93
Result< HttpResponse > del(std::string_view path, std::string_view body={}) const
Definition http_client.hpp:81
~HttpClient() override
Result< HttpResponse > request(HttpMethod method, std::string_view path, std::string_view body={}) const override
path is relative to the base URL and may carry a query string.
Result< HttpResponse > put(std::string_view path, std::string_view body={}) const
Definition http_client.hpp:77
Result< HttpResponse > post(std::string_view path, std::string_view body={}) const
Definition http_client.hpp:73
HttpClient(Signer signer, ClientConfig config={})
HttpClient(ClientConfig config={})
Result< HttpResponse > get(std::string_view path) const
Definition http_client.hpp:70
HttpClient(HttpClient &&) noexcept
const ClientConfig & config() const noexcept
Request boundary used by KalshiClient.
Definition http_client.hpp:62
Result< HttpResponse > del(std::string_view path, std::string_view body={}) const
Definition http_client.hpp:81
Result< HttpResponse > put(std::string_view path, std::string_view body={}) const
Definition http_client.hpp:77
virtual Result< HttpResponse > request(HttpMethod method, std::string_view path, std::string_view body={}) const =0
path is relative to the base URL and may carry a query string.
virtual ~HttpTransport()=default
Result< HttpResponse > post(std::string_view path, std::string_view body={}) const
Definition http_client.hpp:73
Result< HttpResponse > get(std::string_view path) const
Definition http_client.hpp:70
Signs Kalshi requests with an API key.
Definition signer.hpp:32
Definition api.hpp:15
constexpr std::string_view to_string(HttpMethod method) noexcept
Definition http_client.hpp:22
Environment
Kalshi deployment.
Definition environment.hpp:10
constexpr std::string_view rest_base_url(Environment environment) noexcept
REST base URL, including the /trade-api/v2 prefix that requests sign.
Definition environment.hpp:13
std::expected< T, Error > Result
Result type for SDK operations.
Definition error.hpp:50
HttpMethod
HTTP methods.
Definition http_client.hpp:20
Definition http_client.hpp:45
std::chrono::milliseconds timeout
Limit for the whole request, including the response body.
Definition http_client.hpp:49
std::chrono::milliseconds connect_timeout
Definition http_client.hpp:50
static ClientConfig for_environment(Environment environment)
Definition http_client.hpp:53
std::string base_url
Base URL including /trade-api/v2. See rest_base_url().
Definition http_client.hpp:47
bool verify_ssl
Definition http_client.hpp:51
Definition http_client.hpp:36
std::string body
Definition http_client.hpp:38
int status_code
Definition http_client.hpp:37
std::optional< std::string_view > header(std::string_view name) const noexcept
Case-insensitive header lookup. Returns the first match.
std::vector< std::pair< std::string, std::string > > headers
Definition http_client.hpp:39