forked from rosh/MQL5Book
69 lines
2.5 KiB
MQL5
69 lines
2.5 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| HTTPRequest.mqh |
| |
//| Copyright 2022, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#ifndef PRTF
| |
#define PRTF
| |
#endif
| |
| |
//+------------------------------------------------------------------+
| |
//| Basic HTTP-requests with cookies |
| |
//+------------------------------------------------------------------+
| |
class HTTPRequest
| |
{
| |
protected:
| |
string common_headers;
| |
int timeout;
| |
| |
public:
| |
HTTPRequest(const string h = NULL, const int t = 5000):
| |
common_headers(h), timeout(t)
| |
{
| |
if(h != NULL) StringReplace(common_headers, "|", "\r\n"); // provide this because headers can come from 'input'
| |
}
| |
| |
int HEAD(const string address, uchar &result[], string &response,
| |
const string custom_headers = NULL)
| |
{
| |
uchar nodata[];
| |
return request("HEAD", address, custom_headers, nodata, result, response);
| |
}
| |
| |
int GET(const string address, uchar &result[], string &response,
| |
const string custom_headers = NULL)
| |
{
| |
uchar nodata[];
| |
return request("GET", address, custom_headers, nodata, result, response);
| |
}
| |
| |
int POST(const string address, const string payload,
| |
uchar &result[], string &response, const string custom_headers = NULL)
| |
{
| |
uchar bytes[];
| |
const int n = StringToCharArray(payload, bytes, 0, -1, CP_UTF8);
| |
ArrayResize(bytes, n - 1); // remove terminal zero
| |
return request("POST", address, custom_headers, bytes, result, response);
| |
}
| |
| |
int POST(const string address, const uchar &payload[],
| |
uchar &result[], string &response, const string custom_headers = NULL)
| |
{
| |
return request("POST", address, custom_headers, payload, result, response);
| |
}
| |
| |
int request(const string method, const string address,
| |
string headers, const uchar &data[], uchar &result[], string &response)
| |
{
| |
if(headers == NULL) headers = common_headers;
| |
| |
ArrayResize(result, 0);
| |
response = NULL;
| |
Print(">>> Request:\n", method + " " + address + "\n" + headers);
| |
| |
const int code = PRTF(WebRequest(method, address, headers, timeout, data, result, response));
| |
Print("<<< Response:\n", response);
| |
return code;
| |
}
| |
};
| |
//+------------------------------------------------------------------+
|