Как отправить изображение POST-запросом в телеграм функцией WebRequest?

Евгений Могильный  

Здравствуйте!

Я пытаюсь отправить скриншот графика себе в телеграм при помощи метода sendPhoto (документация: https://core.telegram.org/bots/api#sendphoto ), но составить правильный POST-запрос так и не получается. Вот текущий код:


string filename = "spread_indicator_screenshot.png";

ChartScreenShot(get_spread_indicator_chart_id(), filename, 2160, 720);

// -----------------------------
// -----------------------------
// Читаем файл скриншота в массив:  
int h=FileOpen(filename, FILE_ANSI|FILE_BIN|FILE_READ); 

if (h<0) {
   Print("Не удалось открыть файл " + filename); 
   return; 
}

FileSeek(h, 0, SEEK_SET);
ulong n=FileSize(h); // узнали размер файла

uchar photo[]; 
ArrayResize(photo, (int)n); // создали uichar массив под размер данных
FileReadArray(h, photo); // прочитали файл в массив

FileClose(h); // закрыли файл
// -----------------------------
// -----------------------------

string bound="++1BEF0A57BE110FD467A++"; // разделитель данных запроса
string head="Content-Type: multipart/form-data; boundary="+bound+"\r\n"; // заголовок
 
string url="https://api.telegram.org/bot[token]/sendPhoto"; //chat_id=415857081
string params = "chat_id:
415857081 \r\nphoto:" + CharArrayToString(photo);

char data[];
StringToCharArray(params, data, 0, StringLen(params)-1);

Print("Длина массива photo: " + ArraySize(photo));

string cookie=NULL;
string headers;
charpost[],result[];

ResetLastError();
int res=WebRequest("POST", url, cookie, NULL, 500, data, ArraySize(data), result, headers);
 
if(res==-1){
   Print("Ошибка в WebRequest. Код ошибки  =",GetLastError() + "; Возможно дело в том, что домен, на который была попытка отправить запрос, не добавлен в список разрешенных доменов для отправки запросов (Сервис -> Настройки -> Советники)");
}
else{

   Print("Что-то пришло!");

   ResetLastError();
   int handle=FileOpen("response.html",FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE){
   //--- запишем данные массива в конец файла
   FileSeek(handle,0,SEEK_END);
   FileWriteArray(handle,result,0,n);
   //--- закрываем файл
   FileClose(handle);
   }


   if(res==200){
      Print("Вроде получилось отправить скриншот!!!");
   }
   else{
      Print("Не получилось! Статус ответа: " + res);
   } 
     
}

Использовать wininet.dll не хотелось бы, так как все запросы мой советник делает при помощи нативной функции WebRequest.


Заранее спасибо!

Telegram Bot API
  • core.telegram.org
The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram. To learn how to create…
Sergey Zhilinskiy  
Создание бота для Telegram на языке MQL5
Создание бота для Telegram на языке MQL5
  • www.mql5.com
Эта статья — пошаговое руководство по созданию бота для Telegram на языке MQL5. Данный материал будет интересен тем, кто хочет связать торгового робота со своим мобильным устройством. В статье приведены примеры ботов, выполняющие рассылку торговых сигналов, поиск информации на сайте, присылающие информацию о состоянии торгового счета, котировки и скриншоты графиков на ваш смартфон.
Причина обращения: