et encore dll et marché - page 18

 

Je pense que j'arrive à quelque chose avec l'autorisation.

Реter Konow:

Demandez donc à Roman comment faire l'autorisation sur le serveur IBM avecWebRequest, c'est la question clé !

Roman, merci pour le commentaire! Je pense que nous allons nous débrouiller avec l'autorisation également.

Maintenant, quelques paramètres. Dans l'aide sur WebRequest il est indiqué

[in] En-têtes de requête de type "clé : valeur", séparés par un saut de ligne "\r\n".

La variable headers elle-même est de type string

Que voulez-vous dire, la chaîne contient un caractère de saut de ligne, c'est-à-dire la fin de la chaîne ?

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
Dozens of new automated trading applications appear in the MQL5 Market every day. Choose the right app among 10,000 products and forget about unnecessary routine operations of manual trading. Sell your algorithmic trading programs through the largest store of trading applications! Kiss on billions on EURUSD The provided robot (KOB) is a result...
 
Nikolai Karetnikov:

vous devez avoir raison, et la capture d'écran de postman, où la paire de sortie est écrite dans l'en-tête de requête http est expliquée différemment ;)

je pense que nous parlons toujours de la même chose, mais avec des mots différents ;)

Je ne sais pas à quel point le facteur est mal écrit, ce qu'il est, et ce qu'il a à voir avec votre problème...

mais 90 % des problèmes sont résolus par la lecture, et c'est à la personne qui résout le problème de le lire.

C'est assez typique - il y a une documentation sur le service Rest-API (l'avez-vous lu d'ailleurs ??), vous avez la chance qu'ils aient donné un exemple avec curl et qu'il ne soit pas nécessaire d'analyser d'autres langages... et vous devez utiliser WebRequest MT.

Le curl démarre, le protocole est affiché à l'écran - quels en-têtes de paramètres sont générés et envoyés, ce qui est reçu en retour, comment il est compris et où il est placé.

Et il est directement visible ce qu'il faut envoyer à WebRequest

---

 
Maxim Kuznetsov:

Je ne sais pas à quel point le facteur est écrit, ce qu'il est, ou ce qu'il a à voir avec votre problème...

mais 90% sont résolus par la lecture, et c'est à la personne qui résout le problème de le lire.

C'est assez typique - il y a une documentation sur le service Rest-API (l'avez-vous lu d'ailleurs ??), vous avez la chance qu'ils aient donné un exemple avec curl et qu'il ne soit pas nécessaire d'analyser d'autres langages... et vous devez utiliser WebRequest MT.

Le curl démarre, le protocole est affiché à l'écran - quels en-têtes de paramètres sont générés et envoyés, ce qui est reçu en retour, comment il est compris et où il est placé.

Et il est directement visible ce qu'il faut envoyer à WebRequest

---

lire, lire ) On y arrive et on progresse.

 
Nikolai Karetnikov:

Je pense que j'arrive à quelque chose avec l'autorisation.

Roman, merci pour le commentaire! Je pense que nous allons nous débrouiller avec l'autorisation également.

Maintenant, à propos de quelques paramètres. Dans l'aide sur WebRequest, il est dit

[in] En-têtes de requête de type "clé : valeur", séparés par un saut de ligne "\r\n".

La variable headers elle-même est de type string

Que voulez-vous dire, la chaîne de caractères contient un caractère de retour à la ligne, c'est-à-dire un caractère de retour à la ligne ?

L'en-tête peut contenir plus d'une chaîne clé/valeur, un saut de ligne est donc utilisé.
Le double trait d'union"\r\n\r\n" doit être placé à la fin de l'en-tête.
C'est ainsi que le serveur comprend la fin de l'en-tête, qui est une norme http.
Après le double trait d'union, vient le corps de la demande ou de la réponse.

La
fonctionWebRequest sépare ces blocs pour des raisons de commodité.
Pour les en-têtes son propre paramètre, pour le corps le sien.
Mais la syntaxe de l'écriture de la demande, exige le respect de la norme http.

 
Continuez, lieutenant.
 

//+------------------------------------------------------------------+
//|                                                   WebRequest.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie=NULL,headers;
   char   post[],result[];
   string url="https://example-files.online-convert.com/audio/wav/example.wav";
//--- для работы с сервером необходимо добавить URL "https://finance.yahoo.com"
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):
//--- обнуляем код последней ошибки
   ResetLastError();
//--- загрузка html-страницы с Yahoo Finance
   int res=WebRequest("GET",url,cookie,NULL,5000,post,0,result,headers);
   if(res==-1)
     {
      Print("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- успешная загрузка
         PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
         //PrintFormat("Заголовки сервера: %s",headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("example.wav",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- закрываем файл
            FileClose(filehandle);
            Sleep(1*1000);
            PlaySound("\\Files\\example.wav");
           }
         else
            Print("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         PrintFormat("Ошибка загрузки '%s', код %d",url,res);
     }
  }
//+------------------------------------------------------------------+

de ce site webhttps://example-files.online-convert.com/audio/wav/example.wav

télécharge le fichier "example.wav".

et après l'avoir téléchargé, il jouePlaySound("\\Files\\\\Nexemple.wav");

-------------------------------------------------

Mais la signification de cette fonction ? ?? Je ne pense pas !

 

Eh bien, messieurs, passons à autre chose, d'accord ?


//+------------------------------------------------------------------+
//|                                                   WebRequest.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string cookie=NULL,headers;
   char   post[],result[];
   char cost_char_data[];
   string  result_headers;
   
   ResetLastError();
   ArrayFree(result);
  // headers = "Authorization: Basic YXBpa2V5OkdSMWJiM3pWTXM5ZmNOS0w2cEE5LTV6ajlwdFdsaUN1NmVoOW91cFVucFpC/r/n";
   headers = "Authorization: Basic YXBpa2V5OkdSMWJiM3pWTXM5ZmNOS0w2cEE5LTV6ajlwdFdsaUN1NmVoOW91cFVucFpC";
//   headers = headers + "Accept: audio/wav";
   //headers = headers + "Accept: audio/wav/r/n";
  // headers = headers + "Accept: audio/wav/r/n";
 
   string url="https://api.eu-gb.text-to-speech.watson.cloud.ibm.com/instances/9886a3ce-5734-455f-8f78-7a56381da686/v1/synthesize?text=TEST";
               
   int res = WebRequest("GET",url,headers,1000,cost_char_data,result,result_headers);

   if(res==-1)
     {
      printf("Ошибка в WebRequest. Код ошибки  =",GetLastError());
      //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления
      MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- успешная загрузка
         printf("Файл успешно загружен, размер %d байт.",ArraySize(result));
         printf("Заголовки сервера: %s",result_headers);
         //--- сохраняем данные в файл
         int filehandle=FileOpen("testmql5.ogg",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- сохраняем содержимое массива result[] в файл
            FileWriteArray(filehandle,result,0,WHOLE_ARRAY);
            //--- закрываем файл
            FileClose(filehandle);
            printf("FileClose");
            
           }
         else
            printf("Ошибка в FileOpen. Код ошибки =",GetLastError());
        }
      else
         printf("Ошибка загрузки '%s', код %d",url,res);
     }
  }
//+------------------------------------------------------------------+


Tout d'abord, simplifions autant que possible le code de la requête elle-même. Ne laissons qu'un seul en-tête - l'autorisation elle-même, qui fonctionne toujours ! Dans ce cas, sans en-tête supplémentaire, le serveur IBM nous donnera un flux au format audio .ogg. Au diable tout ça, pensons-nous, faisons d'abord quelque chose qui fonctionne. Abandonnons les tentatives futiles de formater le flux en wav avec des en-têtes supplémentaires et occupons-nous du .ogg (à propos, une erreur similaire a été commise avec la syntaxe WebRequesthttps://www.mql5.com/en/forum/310891#comment_16643324 ).

Le script se connecte au serveur et se bloque. Ok, exécutons-le en mode débogage ou autre...

voir, non ? )


Nous supprimons le script du graphique, mais pour une raison quelconque, il n'arrête pas complètement son exécution, il interrompt simplement la requête Web synchrone et continue, ce qui est généralement à notre avantage.

Allons de l'avant. Dans char result[] nous avons maintenant un flux .ogg et nous l'écrivons dans un fichier.

Le fichier obtient 6Kb aussi (aussi, parce que la requête curl ou postman avec les mêmes paramètres retourne un fichier .ogg de 6Kb, qui est lu correctement ! C'est bon d'entendre le mot Test ))))


Maintenant nous écrivons tous les tableaux de chars dans le fichier. Précisez que nous ne devons pas mesurer la taille du tableau, mais prendreWHOLE_ARRAY.

C'est comme ça que ça se présente maintenant :

Le seul problème est que le fichier curl fonctionne bien, mais notre fichier, pour une raison quelconque, ne fonctionne pas.

Regardons à l'intérieur des deux fichiers



Fichier téléchargé par curl en bas, rempli à partir du flux WebRequest en binaire en haut.

Vous voyez ces taches 00000089, 00000004 dans le fichier testmql5.ogg ? ))) C'est un programme de bonus ou quoi ? ))) D'où vient tout cela ))))))))


Résumant

1. La syntaxe est toujours un mystère pour moi. J'ai seulement réussi à m'authentifier auprès du serveur, les tentatives d'ajouter d'autres en-têtes ont échoué jusqu'à présent.

2. Je me demande si WebRequest reçoit un flux avec des pépites, ou si je l'écris dans un fichier de manière incorrecte, mais le format du fichier .ogg obtenu à partir du résultat du tableau de caractères en utilisant la méthode WebRequest n'est pas correct.

Les tomates pourries sont les bienvenues !

Send headers via WebRequest()
Send headers via WebRequest()
  • 2019.04.15
  • www.mql5.com
Hi, I am trying to use WebRequest to send a header and get a response. Basically I have the follow parameters: url: "http://www.b3.com.br/main...
 
Alexsandr San:

de ce site webhttps://example-files.online-convert.com/audio/wav/example.wav

télécharge le fichier "example.wav".

et après l'avoir téléchargé, il jouePlaySound("\\Files\\\\Nexemple.wav");

-------------------------------------------------

Mais la signification de cette fonction ? ?? Je pense que ça n'a aucun sens !

Alexsandr,

C'est génial, merci ! Mais le fichier wav doit être généré par le moteur TTS (TextToSpeech).

 
Nikolai Karetnikov:

Alexsandr,

Tout est génial, merci ! Mais le fichier wav doit être généré par un moteur TTS (TextToSpeech).

J'ai compris - ça devrait marcher...

Синтез в реальном времени
Отправив текст для синтеза, ваш сервис или приложение сразу же получит в ответ аудиозапись: задержка настолько мала, что позволяет создавать программное обеспечение с потоковым воспроизведением.

Photo par

Voici quelque chose de similairehttps://cloud.yandex.ru/docs/speechkit/tts/request

 
Nikolai Karetnikov:

...

Résumer

1. La syntaxe est toujours un mystère pour moi. J'ai seulement réussi à m'authentifier auprès du serveur, les tentatives d'ajouter d'autres en-têtes ont échoué jusqu'à présent.

2. Je me demande si WebRequest reçoit un flux avec des pépites, ou si je l'écris dans un fichier de manière incorrecte, mais le format du fichier .ogg obtenu à partir du résultat du tableau de caractères en utilisant la méthode WebRequest est incorrect.

Les tomates pourries sont les bienvenues !

Réfléchissons logiquement. Alexander a montré que le script télécharge et lit le fichier depuis l'autre serveur normalement. Ainsi, webrequest est configuré correctement. Le seul problème réside dans les spécificités du serveur d'IBM. Les particularités de leurs réponses aux demandes.
Raison: