Go to the documentation of this file.
16 #include "azure/core/internal/contract.hpp"
28 #include <unordered_set>
31 #if defined(TESTING_BUILD)
33 namespace Azure {
namespace Core {
namespace Test {
34 class TestHttp_getters_Test;
35 class TestHttp_query_parameter_Test;
36 class TestHttp_RequestStartTry_Test;
37 class TestURL_getters_Test;
38 class TestURL_query_parameter_Test;
39 class TransportAdapter_headWithStream_Test;
40 class TransportAdapter_putWithStream_Test;
41 class TransportAdapter_deleteRequestWithStream_Test;
42 class TransportAdapter_patchWithStream_Test;
43 class TransportAdapter_putWithStreamOnFail_Test;
44 class TransportAdapter_SizePutFromFile_Test;
45 class TransportAdapter_SizePutFromFileDefault_Test;
46 class TransportAdapter_SizePutFromFileBiggerPage_Test;
50 namespace Azure {
namespace Core {
namespace Http {
103 explicit HttpMethod(std::string value) : m_value(std::move(value)) {}
124 const std::string&
ToString()
const {
return m_value; }
166 namespace Policies {
namespace _internal {
177 friend class Azure::Core::Http::Policies::_internal::RetryPolicy;
178 #if defined(TESTING_BUILD)
180 friend class Azure::Core::Test::TestHttp_getters_Test;
181 friend class Azure::Core::Test::TestHttp_query_parameter_Test;
182 friend class Azure::Core::Test::TestHttp_RequestStartTry_Test;
183 friend class Azure::Core::Test::TestURL_getters_Test;
184 friend class Azure::Core::Test::TestURL_query_parameter_Test;
186 friend class Azure::Core::Test::TransportAdapter_headWithStream_Test;
187 friend class Azure::Core::Test::TransportAdapter_putWithStream_Test;
188 friend class Azure::Core::Test::TransportAdapter_deleteRequestWithStream_Test;
189 friend class Azure::Core::Test::TransportAdapter_patchWithStream_Test;
190 friend class Azure::Core::Test::TransportAdapter_putWithStreamOnFail_Test;
191 friend class Azure::Core::Test::TransportAdapter_SizePutFromFile_Test;
192 friend class Azure::Core::Test::TransportAdapter_SizePutFromFileDefault_Test;
193 friend class Azure::Core::Test::TransportAdapter_SizePutFromFileBiggerPage_Test;
205 bool m_retryModeEnabled{
false};
206 bool m_shouldBufferResponse{
true};
226 bool shouldBufferResponse)
227 : m_method(std::move(httpMethod)), m_url(std::move(url)), m_bodyStream(bodyStream),
228 m_retryModeEnabled(false), m_shouldBufferResponse(shouldBufferResponse)
230 AZURE_ASSERT_MSG(bodyStream,
"The bodyStream pointer cannot be null.");
241 :
Request(httpMethod, std::move(url), bodyStream, true)
274 void SetHeader(std::string
const& name, std::string
const& value);
334 struct RawResponseHelpers final
346 static void InsertHeaderWithValidation(
348 std::string
const& headerName,
349 std::string
const& headerValue);
351 static void inline SetHeader(
353 uint8_t
const*
const first,
354 uint8_t
const*
const last)
358 auto end = std::find(start, last,
':');
362 throw std::invalid_argument(
"Invalid header. No delimiter ':' found.");
367 = Azure::Core::_internal::StringExtensions::ToLower(std::string(start, end));
369 while (start < last && (*start ==
' ' || *start ==
'\t'))
374 end = std::find(start, last,
'\r');
375 auto headerValue = std::string(start, end);
377 response.
SetHeader(headerName, headerValue);
382 namespace _internal {
384 struct HttpShared final
392 static inline std::string GetHeaderOrEmptyString(
394 std::string
const& headerName)
396 auto header = headers.find(headerName);
397 if (header != headers.end())
399 return header->second;
An error while sending the HTTP request with the transport adapter.
Definition: http.hpp:56
BodyStream is used to read data to/from a service.
Request(HttpMethod httpMethod, Url url, Azure::Core::IO::BodyStream *bodyStream)
Constructs a Request.
Definition: http.hpp:240
AZ_CORE_DLLEXPORT static const HttpMethod Head
The representation of a HEAD HTTP method based on RFC 7231.
Definition: http.hpp:136
#define AZ_CORE_DLLEXPORT
Applies DLL export attribute, when applicable.
Definition: dll_import_export.hpp:93
Azure::Nullable< int64_t > Length
The size of the HTTP Range.
Definition: http.hpp:88
AZ_CORE_DLLEXPORT static const HttpMethod Delete
The representation of a DELETE HTTP method based on RFC 7231.
Definition: http.hpp:154
Define the HTTP raw response.
Used to read data to/from a service.
Definition: body_stream.hpp:32
Url & GetUrl()
Get URL.
Definition: http.hpp:324
bool operator!=(const HttpMethod &other) const
Compares two instances of HttpMethod for equality.
Definition: http.hpp:119
Azure::Nullable< std::string > GetHeader(std::string const &name)
Gets a specific HTTP header from an Azure::Core::Http::Request.
Definition: request.cpp:25
Url const & GetUrl() const
Get URL.
Definition: http.hpp:330
TransportException(std::string const &what)
Constructs TransportException with a message string.
Definition: http.hpp:66
AZ_CORE_DLLEXPORT static const HttpMethod Post
The representation of a POST HTTP method based on RFC 7231.
Definition: http.hpp:142
HTTP status code definition.
void SetHeader(std::string const &name, std::string const &value)
Set an HTTP header to the Azure::Core::Http::Request.
Definition: request.cpp:43
The range of bytes within an HTTP resource.
Definition: http.hpp:77
bool ShouldBufferResponse()
A value indicating whether the returned raw response for this request will be buffered within a memor...
Definition: http.hpp:318
A request message from a client to a server.
Definition: http.hpp:176
HttpMethod const & GetMethod() const
Get HttpMethod.
Definition: request.cpp:71
HttpMethod(std::string value)
Constructs HttpMethod from string.
Definition: http.hpp:103
Uniform Resource Locator (URL).
After receiving and interpreting a request message, a server responds with an HTTP response message.
Definition: raw_response.hpp:24
The method to be performed on the resource identified by the Request.
Definition: http.hpp:94
void RemoveHeader(std::string const &name)
Remove an HTTP header.
Definition: request.cpp:52
Azure SDK abstractions.
Definition: azure_assert.hpp:55
void SetHeader(std::string const &name, std::string const &value)
Set an HTTP header to the #RawResponse.
Definition: raw_response.cpp:22
std::map< std::string, std::string, _internal::StringExtensions::CaseInsensitiveComparator > CaseInsensitiveMap
A type alias of std::map<std::string, std::string> with case-insensitive key comparison.
Definition: case_insensitive_containers.hpp:24
An error while trying to send a request to Azure service.
Definition: exception.hpp:57
bool operator==(const HttpMethod &other) const
Compares two instances of HttpMethod for equality.
Definition: http.hpp:111
A map<string, string> with case-insensitive key comparison.
Manages an optional contained value, i.e. a value that may or may not be present.
Define RequestFailedException. It is used by HTTP exceptions.
CaseInsensitiveMap GetHeaders() const
Get HTTP headers.
Definition: request.cpp:73
const std::string & ToString() const
Returns the HttpMethod represented as a string.
Definition: http.hpp:124
AZ_CORE_DLLEXPORT static const HttpMethod Put
The representation of a PUT HTTP method based on RFC 7231.
Definition: http.hpp:148
AZ_CORE_DLLEXPORT static const HttpMethod Get
The representation of a GET HTTP method based on RFC 7231.
Definition: http.hpp:130
Azure::Core::IO::BodyStream * GetBodyStream()
Get HTTP body as Azure::Core::IO::BodyStream.
Definition: http.hpp:312
AZ_CORE_DLLEXPORT static const HttpMethod Patch
The representation of a PATCH HTTP method based on RFC 5789.
Definition: http.hpp:160
Represents the location where a request will be performed.
Definition: url.hpp:47
int64_t Offset
The starting point of the HTTP Range.
Definition: http.hpp:82
Request(HttpMethod httpMethod, Url url, Azure::Core::IO::BodyStream *bodyStream, bool shouldBufferResponse)
Construct an Azure::Core::Http::Request.
Definition: http.hpp:222