Послать get post запрос в mql: mql_requests
18 февраля 2021 г. 11:02
В mql4 и mql5 для отправки простого get или post запроса можно использовать стандартную функцию WebRequest() или функции библиотеки wininet.dll.
Каждый способ имеет свои некоторые неудобства:
- При использовании
WebRequestприходится дополнительно в настройках терминала (Меню\Сервис\Настройкиво вкладкеСоветники) разрешать использованиеWebRequestи вписывать url, с которымWebRequestбудет работать. - Если использовать
wininet.dll, то требуется написать приличное количество строк кода даже для обычного get запроса.
Для простой отправки get и post запросов я написал библиотеку mql_requests, использующую функции библиотеки wininet.dll. mql_requests находится на гитхабе:
https://github.com/vivazzi/mql_requests
Установка mql_requests
Скачайте библиотеку и скопируйте папку mql_requests/Include/requests в <TERMINAL DIR>/MQL(4/5)/Include.
Использование
С помощью mql_requests вы можете простым способом отправлять get и post запросы:
#include "lib/requests.mqh"
int OnInit(){
...
Requests requests;
// get запрос
Response response = requests.get("https://site.com/some/url?par=foo&par_2=bar");
Print("Response: " + response.text);
// Response: some_response_of_url
Print("Response parameters: " + response.parameters);
// Response query: par=foo&par_2=bar
// post запрос
response = requests.post("https://site.com/some/url", "par=foo&par_2=bar");
Print(response.text);
}
Для удобства get или post параметров можно использовать класс RequestData, который входит в пакет mql_requests:
RequestData request_data;
request_data.add("par", "foo");
Requests requests;
Response response = requests.get("https://site.com/some/url", request_data);
Print("Response: " + response.text);
// Response: some_response_of_url
Print("Response parameters: " + response.parameters);
// Response parameters: par=foo
Тестирование get и post запросов
Для тестирования ваших программ и приложений (не только на mql) вы можете использовать мною разработанный сервис отправки GET и POST запросов: Сервис GET POST запросов: Getest
Это полезно, когда нужно быстро убедиться, что ваш код и/или какая-то библиотека (в том числе mql_requests) работает:
RequestData request_data;
request_data.add("par", "foo");
Requests requests;
Response response = requests.get("https://vivazzi.pro/test-request/", request_data);
Print("Response: " + response.text);
// Response: OK,GET,query_string par_1=foo&par_2=bar
response = requests.post("https://vivazzi.pro/test-request/", request_data);
Print("Response: " + response.text);
// Response: OK,POST,body par_1=foo&par_2=bar
В зависимости от типа запроса тестовый url https://vivazzi.pro/test-request/ выдаёт соответствующую информацию. Получив такую информацию в своей программе, вы убедитесь, что ваш написанный код работает.
Буду рад, если разработанный пакет mql_requests для mql окажется для вас полезным!
В README.md пакета на гитхабе вы можете найти более полную и актуальную документацию mql_requests:
https://github.com/vivazzi/mql_requests
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 5
13.11.2022 9:03 #
Ошибка на ошибке, причем масса очень глупых ошибок.
Это не правильно #include
Правильно #include
Это вообще что то новенькое GetLastError(err) - НЕ правильно...
GetLastError() - Правильно...
И Вишенка на торте, критическая ошибка:
Ответить
20.11.2022 12:02 #
Влад, благодарю за обратную связь!
Насчёт
#includeне понял. Видимо редактор съел какую-то часть слов...Насчёт GetLastError - да, согласен. Тут я добавил лишнег о Насчёт фатальной ошибки: возможно, это на mql5 был запущен код. Я для mql4 писал. Я попробую воспроизвести ошибку
Ответить
20.11.2022 12:03 #
Если сделаете PR, буду вам признателен за решение ошибок!
Ответить
10.07.2023 10:53 #
Артем, добрый день ! Поддерживаю Влада. Переход на mql 5 легко поправляться для GetLastError. Но критичная ошибка при запуске 2023.07.10 13:35:12.121 CryptoPred (EURUSD,M20) Access violation at 0x00007FFE071D1F34 read to 0x0000024500000000 in 'wininet.dll '
у меня повторилась тоже. Что с ней делать ? Если дадите свой мейл или телеграм (лучше) - я пришлю Вам необходимые детали
Ответить
10.07.2023 11:35 #
При чем при отладке все ок. А при реальной работе вот такая ошибка падает
Ответить