Polyphase Game Engine
Loading...
Searching...
No Matches
HttpRequest.h
Go to the documentation of this file.
1#pragma once
2
3#include <map>
4#include <stdint.h>
5#include <string>
6#include <vector>
7
8#include "PolyphaseAPI.h"
10
11// Case-insensitive comparator for header keys (HTTP/1.1 header names are case-insensitive).
13{
14 bool operator()(const std::string& a, const std::string& b) const;
15};
16
17using HttpHeaderMap = std::map<std::string, std::string, HttpHeaderLess>;
18
20{
21public:
22 // Out-of-line so the engine DLL is the single owner of construction /
23 // destruction / copy / move. See HttpResponse.h for rationale.
25 HttpRequest(HttpVerb verb, std::string url);
29 HttpRequest& operator=(const HttpRequest&);
30 HttpRequest& operator=(HttpRequest&&) noexcept;
31
32 // Builder-style mutators. Each returns *this for chaining.
33 HttpRequest& Verb(HttpVerb v) { mVerb = v; return *this; }
34 HttpRequest& Url(std::string u) { mUrl = std::move(u); return *this; }
35 HttpRequest& Header(std::string k, std::string v) { mHeaders[std::move(k)] = std::move(v); return *this; }
36 HttpRequest& Body(const std::string& s) { mBody.assign(s.begin(), s.end()); return *this; }
37 HttpRequest& Body(std::vector<uint8_t> b) { mBody = std::move(b); return *this; }
38 HttpRequest& Body(const uint8_t* data, size_t size) { mBody.assign(data, data + size); return *this; }
39 HttpRequest& TimeoutMs(int32_t ms) { mTimeoutMs = ms; return *this; }
40 HttpRequest& MaxRedirects(int32_t n) { mMaxRedirects = n; return *this; }
41 HttpRequest& MaxBodyBytes(int64_t n) { mMaxBodyBytes = n; return *this; }
42 HttpRequest& VerifySsl(bool v) { mVerifySsl = v; return *this; }
43
44 HttpVerb GetVerb() const { return mVerb; }
45 const std::string& GetUrl() const { return mUrl; }
46 const HttpHeaderMap& GetHeaders() const { return mHeaders; }
47 const std::vector<uint8_t>& GetBody() const { return mBody; }
48 int32_t GetTimeoutMs() const { return mTimeoutMs; }
49 int32_t GetMaxRedirects() const { return mMaxRedirects; }
50 int64_t GetMaxBodyBytes() const { return mMaxBodyBytes; }
51 bool GetVerifySsl() const { return mVerifySsl; }
52
53private:
54 HttpVerb mVerb = HttpVerb::Get;
55 std::string mUrl;
56 HttpHeaderMap mHeaders;
57 std::vector<uint8_t> mBody;
58 int32_t mTimeoutMs = 10000;
59 int32_t mMaxRedirects = 5;
60 int64_t mMaxBodyBytes = 64ll * 1024 * 1024; // 64 MiB
61 bool mVerifySsl = true;
62};
std::map< std::string, std::string, HttpHeaderLess > HttpHeaderMap
Definition HttpRequest.h:17
HttpVerb
Definition HttpTypes.h:8
Export macros for Polyphase Engine symbols.
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition HttpRequest.h:20
int32_t GetMaxRedirects() const
Definition HttpRequest.h:49
int64_t GetMaxBodyBytes() const
Definition HttpRequest.h:50
HttpRequest & Header(std::string k, std::string v)
Definition HttpRequest.h:35
HttpRequest & Url(std::string u)
Definition HttpRequest.h:34
HttpRequest & Body(const std::string &s)
Definition HttpRequest.h:36
HttpRequest & Body(std::vector< uint8_t > b)
Definition HttpRequest.h:37
HttpRequest(HttpRequest &&) noexcept
HttpRequest & MaxRedirects(int32_t n)
Definition HttpRequest.h:40
HttpRequest(const HttpRequest &)
HttpRequest & MaxBodyBytes(int64_t n)
Definition HttpRequest.h:41
HttpRequest & TimeoutMs(int32_t ms)
Definition HttpRequest.h:39
HttpRequest & VerifySsl(bool v)
Definition HttpRequest.h:42
const std::string & GetUrl() const
Definition HttpRequest.h:45
HttpVerb GetVerb() const
Definition HttpRequest.h:44
bool GetVerifySsl() const
Definition HttpRequest.h:51
const HttpHeaderMap & GetHeaders() const
Definition HttpRequest.h:46
int32_t GetTimeoutMs() const
Definition HttpRequest.h:48
const std::vector< uint8_t > & GetBody() const
Definition HttpRequest.h:47
HttpRequest & Body(const uint8_t *data, size_t size)
Definition HttpRequest.h:38
Definition HttpRequest.h:13