AWS SDK for C++
AWS SDK for C++
Loading...
Searching...
No Matches
HttpRequest.h
Go to the documentation of this file.
1
6#pragma once
7
9
10#include <aws/core/http/URI.h>
16#include <memory>
17#include <functional>
18
19namespace Aws
20{
21 namespace Crt
22 {
23 namespace Http
24 {
25 class HttpRequest;
26 }
27 }
28 namespace Utils
29 {
30 namespace Crypto
31 {
32 class Hash;
33 }
34 }
35 namespace Http
36 {
37 extern AWS_CORE_API const char DATE_HEADER[];
38 extern AWS_CORE_API const char AWS_DATE_HEADER[];
39 extern AWS_CORE_API const char AWS_SECURITY_TOKEN[];
40 extern AWS_CORE_API const char ACCEPT_HEADER[];
41 extern AWS_CORE_API const char ACCEPT_CHAR_SET_HEADER[];
42 extern AWS_CORE_API const char ACCEPT_ENCODING_HEADER[];
43 extern AWS_CORE_API const char AUTHORIZATION_HEADER[];
44 extern AWS_CORE_API const char AWS_AUTHORIZATION_HEADER[];
45 extern AWS_CORE_API const char COOKIE_HEADER[];
47 extern AWS_CORE_API const char CONTENT_LENGTH_HEADER[];
48 extern AWS_CORE_API const char CONTENT_TYPE_HEADER[];
49 extern AWS_CORE_API const char CONTENT_ENCODING_HEADER[];
50 extern AWS_CORE_API const char TRANSFER_ENCODING_HEADER[];
51 extern AWS_CORE_API const char USER_AGENT_HEADER[];
52 extern AWS_CORE_API const char VIA_HEADER[];
53 extern AWS_CORE_API const char HOST_HEADER[];
54 extern AWS_CORE_API const char AMZ_TARGET_HEADER[];
55 extern AWS_CORE_API const char X_AMZ_EXPIRES_HEADER[];
56 extern AWS_CORE_API const char CONTENT_MD5_HEADER[];
57 extern AWS_CORE_API const char API_VERSION_HEADER[];
58 extern AWS_CORE_API const char AWS_TRAILER_HEADER[];
59 extern AWS_CORE_API const char SDK_INVOCATION_ID_HEADER[];
60 extern AWS_CORE_API const char SDK_REQUEST_HEADER[];
61 extern AWS_CORE_API const char X_AMZN_TRACE_ID_HEADER[];
62 extern AWS_CORE_API const char CHUNKED_VALUE[];
63 extern AWS_CORE_API const char AWS_CHUNKED_VALUE[];
64 extern AWS_CORE_API const char X_AMZN_ERROR_TYPE[];
65
66 class HttpRequest;
67 class HttpResponse;
68
72 typedef std::function<void(const HttpRequest*, HttpResponse*, long long)> DataReceivedEventHandler;
76 typedef std::function<void(const HttpRequest*, long long)> DataSentEventHandler;
80 typedef std::function<bool(const HttpRequest*)> ContinueRequestHandler;
81
86 {
87 public:
91 HttpRequest(const URI& uri, HttpMethod method) :
92 m_uri(uri), m_method(method), m_isEvenStreamRequest(false)
93 {}
94
95 virtual ~HttpRequest() {}
96
104 virtual const Aws::String& GetHeaderValue(const char* headerName) const = 0;
108 virtual void SetHeaderValue(const char* headerName, const Aws::String& headerValue) = 0;
112 virtual void SetHeaderValue(const Aws::String& headerName, const Aws::String& headerValue) = 0;
116 virtual void DeleteHeader(const char* headerName) = 0;
120 virtual void AddContentBody(const std::shared_ptr<Aws::IOStream>& strContent) = 0;
124 virtual const std::shared_ptr<Aws::IOStream>& GetContentBody() const = 0;
128 virtual bool HasHeader(const char* name) const = 0;
132 virtual int64_t GetSize() const = 0;
140 virtual void SetResponseStreamFactory(const Aws::IOStreamFactory& factory) = 0;
144 inline URI& GetUri()
145 {
146 return m_uri;
147 }
151 const URI& GetUri() const { return m_uri; }
156 inline Aws::String GetURIString(bool includeQueryString = true) const
157 {
158 return m_uri.GetURIString(includeQueryString);
159 }
163 inline HttpMethod GetMethod() const
164 {
165 return m_method;
166 }
170 inline const Aws::String& GetQueryString() const
171 {
172 return m_uri.GetQueryString();
173 }
178 {
179 m_uri.CanonicalizeQueryString();
180 }
185 {
186 return m_uri.GetQueryStringParameters();
187 }
191 inline void AddQueryStringParameter(const char* key, const Aws::String& value)
192 {
193 m_uri.AddQueryStringParameter(key, value);
194 }
195
196 inline bool HasDate() const
197 {
198 return HasHeader(DATE_HEADER);
199 }
203 inline const Aws::String& GetDate() const
204 {
205 return GetHeaderValue(DATE_HEADER);
206 }
210 inline void SetDate(const Aws::String& value)
211 {
212 SetHeaderValue(DATE_HEADER, value);
213 }
214
215 inline bool HasAccept() const
216 {
217 return HasHeader(ACCEPT_HEADER);
218 }
222 inline const Aws::String& GetAccept() const
223 {
224 return GetHeaderValue(ACCEPT_HEADER);
225 }
229 inline void SetAccept(const Aws::String& value)
230 {
231 SetHeaderValue(ACCEPT_HEADER, value);
232 }
233
234 inline bool HasAcceptCharSet() const
235 {
236 return HasHeader(ACCEPT_CHAR_SET_HEADER);
237 }
241 inline const Aws::String& GetAcceptCharSet() const
242 {
243 return GetHeaderValue(ACCEPT_CHAR_SET_HEADER);
244 }
248 inline void SetAcceptCharSet(const Aws::String& value)
249 {
250 SetHeaderValue(ACCEPT_CHAR_SET_HEADER, value);
251 }
252
253 inline bool HasAcceptEncoding() const
254 {
255 return HasHeader(ACCEPT_ENCODING_HEADER);
256 }
260 inline const Aws::String& GetAcceptEncoding() const
261 {
262 return GetHeaderValue(ACCEPT_ENCODING_HEADER);
263 }
267 inline void SetAcceptEncoding(const Aws::String& value)
268 {
269 SetHeaderValue(ACCEPT_ENCODING_HEADER, value);
270 }
271
272 inline bool HasAuthorization() const
273 {
274 return HasHeader(AUTHORIZATION_HEADER);
275 }
279 inline const Aws::String& GetAuthorization() const
280 {
281 return GetHeaderValue(AUTHORIZATION_HEADER);
282 }
286 inline void SetAuthorization(const Aws::String& value)
287 {
288 SetHeaderValue(AUTHORIZATION_HEADER, value);
289 }
290
291 inline bool HasAwsAuthorization() const
292 {
293 return HasHeader(AWS_AUTHORIZATION_HEADER);
294 }
298 inline const Aws::String& GetAwsAuthorization() const
299 {
300 return GetHeaderValue(AWS_AUTHORIZATION_HEADER);
301 }
305 inline void SetAwsAuthorization(const Aws::String& value)
306 {
307 SetHeaderValue(AWS_AUTHORIZATION_HEADER, value);
308 }
309
310 inline bool HasAwsSessionToken() const
311 {
312 return HasHeader(AWS_SECURITY_TOKEN);
313 }
317 inline const Aws::String& GetAwsSessionToken() const
318 {
319 return GetHeaderValue(AWS_SECURITY_TOKEN);
320 }
324 inline void SetAwsSessionToken(const Aws::String& value)
325 {
326 SetHeaderValue(AWS_SECURITY_TOKEN, value);
327 }
328
329 inline bool HasCookie() const
330 {
331 return HasHeader(COOKIE_HEADER);
332 }
336 inline const Aws::String& GetCookie() const
337 {
338 return GetHeaderValue(COOKIE_HEADER);
339 }
343 inline void SetCookie(const Aws::String& value)
344 {
345 SetHeaderValue(COOKIE_HEADER, value);
346 }
347
348 inline bool HasContentLength() const
349 {
350 return HasHeader(CONTENT_LENGTH_HEADER);
351 }
355 inline const Aws::String& GetContentLength() const
356 {
357 return GetHeaderValue(CONTENT_LENGTH_HEADER);
358 }
362 inline void SetContentLength(const Aws::String& value)
363 {
364 SetHeaderValue(CONTENT_LENGTH_HEADER, value);
365 }
366
367 inline bool HasContentType() const
368 {
369 return HasHeader(CONTENT_TYPE_HEADER);
370 }
374 inline const Aws::String& GetContentType() const
375 {
376 return GetHeaderValue(CONTENT_TYPE_HEADER);
377 }
381 inline void SetContentType(const Aws::String& value)
382 {
383 SetHeaderValue(CONTENT_TYPE_HEADER, value);
384 }
385
386 inline bool HasTransferEncoding() const
387 {
388 return HasHeader(TRANSFER_ENCODING_HEADER);
389 }
393 inline const Aws::String& GetTransferEncoding() const
394 {
395 return GetHeaderValue(TRANSFER_ENCODING_HEADER);
396 }
400 inline void SetTransferEncoding(const Aws::String& value)
401 {
402 SetHeaderValue(TRANSFER_ENCODING_HEADER, value);
403 }
404
405 inline bool HasUserAgent() const
406 {
407 return HasHeader(USER_AGENT_HEADER);
408 }
412 inline const Aws::String& GetUserAgent() const
413 {
414 return GetHeaderValue(USER_AGENT_HEADER);
415 }
419 inline void SetUserAgent(const Aws::String& value)
420 {
421 SetHeaderValue(USER_AGENT_HEADER, value);
422 }
423
424 inline bool HasVia() const
425 {
426 return HasHeader(VIA_HEADER);
427 }
431 inline const Aws::String& GetVia() const
432 {
433 return GetHeaderValue(VIA_HEADER);
434 }
438 inline void SetVia(const Aws::String& value)
439 {
440 SetHeaderValue(VIA_HEADER, value);
441 }
442
446 inline bool HasApiVersion() const
447 {
448 return HasHeader(API_VERSION_HEADER);
449 }
450
454 inline const Aws::String& GetApiVersion() const
455 {
456 return GetHeaderValue(API_VERSION_HEADER);
457 }
461 inline void SetApiVersion(const Aws::String& value)
462 {
463 SetHeaderValue(API_VERSION_HEADER, value);
464 }
465
469 inline void SetDataReceivedEventHandler(const DataReceivedEventHandler& dataReceivedEventHandler) { m_onDataReceived = dataReceivedEventHandler; }
473 inline void SetDataReceivedEventHandler(DataReceivedEventHandler&& dataReceivedEventHandler) { m_onDataReceived = std::move(dataReceivedEventHandler); }
477 inline void SetDataSentEventHandler(const DataSentEventHandler& dataSentEventHandler) { m_onDataSent = dataSentEventHandler; }
481 inline void SetDataSentEventHandler(DataSentEventHandler&& dataSentEventHandler) { m_onDataSent = std::move(dataSentEventHandler); }
485 inline void SetContinueRequestHandle(const ContinueRequestHandler& continueRequestHandler) { m_continueRequest = continueRequestHandler; }
489 inline void SetContinueRequestHandle(ContinueRequestHandler&& continueRequestHandler) { m_continueRequest = std::move(continueRequestHandler); }
490
494 inline const DataReceivedEventHandler& GetDataReceivedEventHandler() const { return m_onDataReceived; }
498 inline const DataSentEventHandler& GetDataSentEventHandler() const { return m_onDataSent; }
499
500 inline const ContinueRequestHandler& GetContinueRequestHandler() const { return m_continueRequest; }
501
505 inline const Aws::String& GetSigningAccessKey() const { return m_signingAccessKey; }
509 inline void SetSigningAccessKey(const Aws::String& accessKey) { m_signingAccessKey = accessKey; }
510
514 inline const Aws::String& GetSigningRegion() const { return m_signingRegion; }
518 inline void SetSigningRegion(const Aws::String& region) { m_signingRegion = region; }
519
525 virtual void AddRequestMetric(const Aws::String& key, int64_t value) { m_httpRequestMetrics.emplace(key, value); }
526
530 virtual void SetRequestMetrics(const Aws::Monitoring::HttpClientMetricsCollection& collection) { m_httpRequestMetrics = collection; }
531
535 virtual const Aws::Monitoring::HttpClientMetricsCollection& GetRequestMetrics() const { return m_httpRequestMetrics; }
536
543 Aws::String GetResolvedRemoteHost() const { return m_resolvedRemoteHost; }
544 void SetResolvedRemoteHost(const Aws::String& ip) { m_resolvedRemoteHost = ip; }
545
546 bool IsEventStreamRequest() { return m_isEvenStreamRequest; }
547 void SetEventStreamRequest(bool eventStreamRequest) { m_isEvenStreamRequest = eventStreamRequest; }
548
549 virtual std::shared_ptr<Aws::Crt::Http::HttpRequest> ToCrtHttpRequest();
550
551 void SetRequestHash(const Aws::String& algorithmName, const std::shared_ptr<Aws::Utils::Crypto::Hash>& hash)
552 {
553 m_requestHash = std::make_pair(algorithmName, hash);
554 }
555 const std::pair<Aws::String, std::shared_ptr<Aws::Utils::Crypto::Hash>>& GetRequestHash() { return m_requestHash; }
556
557 void AddResponseValidationHash(const Aws::String& algorithmName, const std::shared_ptr<Aws::Utils::Crypto::Hash>& hash)
558 {
559 m_responseValidationHashes.emplace_back(algorithmName, hash);
560 }
562
563 private:
564 URI m_uri;
565 HttpMethod m_method;
566 bool m_isEvenStreamRequest;
567 DataReceivedEventHandler m_onDataReceived;
568 DataSentEventHandler m_onDataSent;
569 ContinueRequestHandler m_continueRequest;
570 Aws::String m_signingRegion;
571 Aws::String m_signingAccessKey;
572 Aws::String m_resolvedRemoteHost;
574 std::pair<Aws::String, std::shared_ptr<Aws::Utils::Crypto::Hash>> m_requestHash;
576 };
577
578 } // namespace Http
579} // namespace Aws
#define AWS_CORE_API
Definition: Core_EXPORTS.h:26
const char *const name
Definition: cJSON.h:278
const Aws::String & GetQueryString() const
Definition: HttpRequest.h:170
bool HasAwsSessionToken() const
Definition: HttpRequest.h:310
bool HasContentLength() const
Definition: HttpRequest.h:348
const ContinueRequestHandler & GetContinueRequestHandler() const
Definition: HttpRequest.h:500
HttpMethod GetMethod() const
Definition: HttpRequest.h:163
QueryStringParameterCollection GetQueryStringParameters() const
Definition: HttpRequest.h:184
bool HasAwsAuthorization() const
Definition: HttpRequest.h:291
virtual void SetHeaderValue(const Aws::String &headerName, const Aws::String &headerValue)=0
void SetApiVersion(const Aws::String &value)
Definition: HttpRequest.h:461
bool HasCookie() const
Definition: HttpRequest.h:329
virtual void SetResponseStreamFactory(const Aws::IOStreamFactory &factory)=0
Aws::String GetResolvedRemoteHost() const
Definition: HttpRequest.h:543
bool HasContentType() const
Definition: HttpRequest.h:367
bool HasApiVersion() const
Definition: HttpRequest.h:446
virtual HeaderValueCollection GetHeaders() const =0
const Aws::String & GetCookie() const
Definition: HttpRequest.h:336
const URI & GetUri() const
Definition: HttpRequest.h:151
const Aws::String & GetApiVersion() const
Definition: HttpRequest.h:454
void SetRequestHash(const Aws::String &algorithmName, const std::shared_ptr< Aws::Utils::Crypto::Hash > &hash)
Definition: HttpRequest.h:551
virtual void AddContentBody(const std::shared_ptr< Aws::IOStream > &strContent)=0
void SetSigningRegion(const Aws::String &region)
Definition: HttpRequest.h:518
void SetContinueRequestHandle(const ContinueRequestHandler &continueRequestHandler)
Definition: HttpRequest.h:485
void SetCookie(const Aws::String &value)
Definition: HttpRequest.h:343
virtual const Aws::IOStreamFactory & GetResponseStreamFactory() const =0
const Aws::String & GetAwsSessionToken() const
Definition: HttpRequest.h:317
const DataSentEventHandler & GetDataSentEventHandler() const
Definition: HttpRequest.h:498
const DataReceivedEventHandler & GetDataReceivedEventHandler() const
Definition: HttpRequest.h:494
virtual void DeleteHeader(const char *headerName)=0
const Aws::String & GetAwsAuthorization() const
Definition: HttpRequest.h:298
void SetAwsSessionToken(const Aws::String &value)
Definition: HttpRequest.h:324
bool HasAcceptCharSet() const
Definition: HttpRequest.h:234
virtual const Aws::String & GetHeaderValue(const char *headerName) const =0
virtual std::shared_ptr< Aws::Crt::Http::HttpRequest > ToCrtHttpRequest()
const Aws::String & GetTransferEncoding() const
Definition: HttpRequest.h:393
const Aws::String & GetDate() const
Definition: HttpRequest.h:203
HttpRequest(const URI &uri, HttpMethod method)
Definition: HttpRequest.h:91
void SetUserAgent(const Aws::String &value)
Definition: HttpRequest.h:419
void SetDataReceivedEventHandler(DataReceivedEventHandler &&dataReceivedEventHandler)
Definition: HttpRequest.h:473
void SetAuthorization(const Aws::String &value)
Definition: HttpRequest.h:286
void SetVia(const Aws::String &value)
Definition: HttpRequest.h:438
void SetDataReceivedEventHandler(const DataReceivedEventHandler &dataReceivedEventHandler)
Definition: HttpRequest.h:469
Aws::String GetURIString(bool includeQueryString=true) const
Definition: HttpRequest.h:156
const Aws::String & GetAuthorization() const
Definition: HttpRequest.h:279
const std::pair< Aws::String, std::shared_ptr< Aws::Utils::Crypto::Hash > > & GetRequestHash()
Definition: HttpRequest.h:555
void SetContentType(const Aws::String &value)
Definition: HttpRequest.h:381
const Aws::String & GetContentLength() const
Definition: HttpRequest.h:355
void SetAcceptEncoding(const Aws::String &value)
Definition: HttpRequest.h:267
const Aws::Vector< std::pair< Aws::String, std::shared_ptr< Aws::Utils::Crypto::Hash > > > & GetResponseValidationHashes() const
Definition: HttpRequest.h:561
const Aws::String & GetSigningAccessKey() const
Definition: HttpRequest.h:505
const Aws::String & GetSigningRegion() const
Definition: HttpRequest.h:514
const Aws::String & GetAccept() const
Definition: HttpRequest.h:222
void SetDataSentEventHandler(DataSentEventHandler &&dataSentEventHandler)
Definition: HttpRequest.h:481
void AddQueryStringParameter(const char *key, const Aws::String &value)
Definition: HttpRequest.h:191
virtual const Aws::Monitoring::HttpClientMetricsCollection & GetRequestMetrics() const
Definition: HttpRequest.h:535
void SetSigningAccessKey(const Aws::String &accessKey)
Definition: HttpRequest.h:509
void SetResolvedRemoteHost(const Aws::String &ip)
Definition: HttpRequest.h:544
virtual void SetRequestMetrics(const Aws::Monitoring::HttpClientMetricsCollection &collection)
Definition: HttpRequest.h:530
bool HasDate() const
Definition: HttpRequest.h:196
void SetDataSentEventHandler(const DataSentEventHandler &dataSentEventHandler)
Definition: HttpRequest.h:477
const Aws::String & GetAcceptCharSet() const
Definition: HttpRequest.h:241
bool HasUserAgent() const
Definition: HttpRequest.h:405
bool HasAccept() const
Definition: HttpRequest.h:215
const Aws::String & GetAcceptEncoding() const
Definition: HttpRequest.h:260
const Aws::String & GetContentType() const
Definition: HttpRequest.h:374
void SetContentLength(const Aws::String &value)
Definition: HttpRequest.h:362
bool HasAuthorization() const
Definition: HttpRequest.h:272
virtual const std::shared_ptr< Aws::IOStream > & GetContentBody() const =0
void SetEventStreamRequest(bool eventStreamRequest)
Definition: HttpRequest.h:547
virtual void AddRequestMetric(const Aws::String &key, int64_t value)
Definition: HttpRequest.h:525
void SetContinueRequestHandle(ContinueRequestHandler &&continueRequestHandler)
Definition: HttpRequest.h:489
void AddResponseValidationHash(const Aws::String &algorithmName, const std::shared_ptr< Aws::Utils::Crypto::Hash > &hash)
Definition: HttpRequest.h:557
bool HasAcceptEncoding() const
Definition: HttpRequest.h:253
void SetAwsAuthorization(const Aws::String &value)
Definition: HttpRequest.h:305
virtual bool HasHeader(const char *name) const =0
bool HasTransferEncoding() const
Definition: HttpRequest.h:386
const Aws::String & GetVia() const
Definition: HttpRequest.h:431
virtual int64_t GetSize() const =0
const Aws::String & GetUserAgent() const
Definition: HttpRequest.h:412
void SetAccept(const Aws::String &value)
Definition: HttpRequest.h:229
void SetTransferEncoding(const Aws::String &value)
Definition: HttpRequest.h:400
virtual void SetHeaderValue(const char *headerName, const Aws::String &headerValue)=0
void SetDate(const Aws::String &value)
Definition: HttpRequest.h:210
void SetAcceptCharSet(const Aws::String &value)
Definition: HttpRequest.h:248
AWS_CORE_API const char ACCEPT_CHAR_SET_HEADER[]
AWS_CORE_API const char USER_AGENT_HEADER[]
AWS_CORE_API const char SDK_REQUEST_HEADER[]
std::function< void(const HttpRequest *, HttpResponse *, long long)> DataReceivedEventHandler
Definition: HttpRequest.h:72
AWS_CORE_API const char AWS_AUTHORIZATION_HEADER[]
AWS_CORE_API const char CHUNKED_VALUE[]
AWS_CORE_API const char ACCEPT_ENCODING_HEADER[]
Aws::MultiMap< Aws::String, Aws::String > QueryStringParameterCollection
Definition: URI.h:29
std::function< void(const HttpRequest *, long long)> DataSentEventHandler
Definition: HttpRequest.h:76
AWS_CORE_API const char DECODED_CONTENT_LENGTH_HEADER[]
AWS_CORE_API const char CONTENT_LENGTH_HEADER[]
AWS_CORE_API const char X_AMZN_TRACE_ID_HEADER[]
AWS_CORE_API const char AUTHORIZATION_HEADER[]
AWS_CORE_API const char CONTENT_ENCODING_HEADER[]
AWS_CORE_API const char DATE_HEADER[]
AWS_CORE_API const char AWS_SECURITY_TOKEN[]
AWS_CORE_API const char API_VERSION_HEADER[]
AWS_CORE_API const char AWS_CHUNKED_VALUE[]
AWS_CORE_API const char CONTENT_MD5_HEADER[]
AWS_CORE_API const char X_AMZN_ERROR_TYPE[]
std::function< bool(const HttpRequest *)> ContinueRequestHandler
Definition: HttpRequest.h:80
AWS_CORE_API const char VIA_HEADER[]
AWS_CORE_API const char ACCEPT_HEADER[]
AWS_CORE_API const char AWS_DATE_HEADER[]
AWS_CORE_API const char AMZ_TARGET_HEADER[]
AWS_CORE_API const char AWS_TRAILER_HEADER[]
AWS_CORE_API const char CONTENT_TYPE_HEADER[]
AWS_CORE_API const char TRANSFER_ENCODING_HEADER[]
AWS_CORE_API const char HOST_HEADER[]
Aws::Map< Aws::String, Aws::String > HeaderValueCollection
Definition: HttpTypes.h:53
AWS_CORE_API const char X_AMZ_EXPIRES_HEADER[]
AWS_CORE_API const char COOKIE_HEADER[]
AWS_CORE_API const char SDK_INVOCATION_ID_HEADER[]
Aws::Map< Aws::String, int64_t > HttpClientMetricsCollection
std::function< Aws::IOStream *(void) > IOStreamFactory
Definition: AWSStreamFwd.h:25
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition: AWSString.h:97
std::vector< T, Aws::Allocator< T > > Vector
Definition: AWSVector.h:17