Connexus/Header/HttpBody.mqh

134 lines
12 KiB
MQL5
Raw Permalink Normal View History

2025-06-05 11:54:55 -03:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| Include the file CJson class |
//+------------------------------------------------------------------+
#include "../Utils/Json.mqh"
//+------------------------------------------------------------------+
//| class : CHttpBody |
//| |
//| [PROPERTY] |
//| Name : CHttpBody |
//| Heritage : No heritage |
//| Description : Responsible for organizing and storing the body of |
//| a request. |
//| |
//+------------------------------------------------------------------+
class CHttpBody
{
private:
char m_body[]; // Will store the request body as a char array
uint m_codepage; // Used to store the defined encoding
public:
CHttpBody(void);
~CHttpBody(void);
//--- Add data to the body
void AddString(string data); // Adds a text string to the request body
void AddJson(CJson &data); // Adds data in JSON format to the body
void AddBinary(char &data[]); // Allows you to add binary data
//--- Clear the body
void Clear(void); // Remove all body content
//--- Gets the body content
string ToString(void); // Returns the request body as a string
CJson ToJson(void); // Converts the request body into a JSON object, useful when the body contains structured data
void ToBinaryArray(char &body[]); // Returns the body as an array of bytes, useful for working with binary data
//--- Size in bytes
int Size(void); // Returns the size of the request body, usually in bytes
//--- Codepage
uint GetEncoding(void); // Returns the defined codepage
void SetEncoding(uint codepage); // Defines the codepage to be used
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CHttpBody::CHttpBody(void)
{
m_codepage = CP_UTF8;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CHttpBody::~CHttpBody(void)
{
}
//+------------------------------------------------------------------+
//| Adds a text string to the request body |
//+------------------------------------------------------------------+
void CHttpBody::AddString(string data)
{
StringToCharArray(data,m_body,this.Size()-1,WHOLE_ARRAY,m_codepage);
ArrayRemove(m_body,this.Size()-1);
}
//+------------------------------------------------------------------+
//| Adds data in JSON format to the body |
//+------------------------------------------------------------------+
void CHttpBody::AddJson(CJson &data)
{
this.AddString(data.Serialize());
}
//+------------------------------------------------------------------+
//| Allows you to add binary data |
//+------------------------------------------------------------------+
void CHttpBody::AddBinary(char &data[])
{
ArrayCopy(m_body,data);
}
//+------------------------------------------------------------------+
//| Remove all body content |
//+------------------------------------------------------------------+
void CHttpBody::Clear(void)
{
ArrayFree(m_body);
}
//+------------------------------------------------------------------+
//| Returns the request body as a string |
//+------------------------------------------------------------------+
string CHttpBody::ToString(void)
{
return(CharArrayToString(m_body,0,WHOLE_ARRAY,m_codepage));
}
//+------------------------------------------------------------------+
//| Converts the request body into a JSON object, useful when the |
//| body contains structured data |
//+------------------------------------------------------------------+
CJson CHttpBody::ToJson(void)
{
CJson json;
json.Deserialize(this.ToString());
return(json);
}
//+------------------------------------------------------------------+
//| Returns the body as an array of bytes, useful for working with |
//| binary data |
//+------------------------------------------------------------------+
void CHttpBody::ToBinaryArray(char &body[])
{
ArrayCopy(body,m_body);
}
//+------------------------------------------------------------------+
//| Returns the size of the request body, usually in bytes |
//+------------------------------------------------------------------+
int CHttpBody::Size(void)
{
return(ArraySize(m_body));
}
//+------------------------------------------------------------------+
//| Returns the defined codepage |
//+------------------------------------------------------------------+
uint CHttpBody::GetEncoding(void)
{
return(m_codepage);
}
//+------------------------------------------------------------------+
//| Defines the codepage to be used |
//+------------------------------------------------------------------+
void CHttpBody::SetEncoding(uint codepage)
{
m_codepage = codepage;
}
//+------------------------------------------------------------------+