e novamente dll e mercado - página 18

 

Acho que estou chegando a algum lugar com autorização.

Реter Konow:

Então pergunte a Roman como fazer a autorização no servidor IBM comWebRequest, essa é a pergunta chave!

Roman, obrigado pelo comentário! Acho que vamos conseguir com autorização também.

Agora sobre alguns parâmetros. Na ajuda sobre WebRequest é indicado

[em] Cabeçalhos de consulta do tipo "chave: valor", separados por uma quebra de linha "rn".

Os cabeçalhos variáveis em si são do tipo string

Como assim, a corda contém um caracter de quebra de linha, ou seja, o final da corda?

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:

você deve estar certo, e a captura de tela do carteiro, onde o par de saída é escrito no cabeçalho do pedido http é explicado de maneira diferente )

suspeito que ainda estamos falando da mesma coisa, mas em palavras diferentes )

Não sei o quanto o carteiro está mal escrito, o que é e o que tem a ver com seu problema...

mas 90% é resolvido pela leitura, e cabe à pessoa que resolve o problema lê-lo.

É uma coisa bastante típica - há documentação do serviço Rest-API (você já leu a propósito???) , você tem sorte de eles terem dado um exemplo com o Curl e não há necessidade de analisar outros idiomas... e você tem que usar o WebRequest MT.

A ondulação começa, o protocolo é mostrado na tela - quais cabeçalhos de parâmetros são gerados e enviados, o que é recebido de volta, como é entendido e onde é colocado.

E é diretamente visível o que enviar para WebRequest

---

 
Maxim Kuznetsov:

Não sei o quanto o carteiro está mal escrito, o que é ou o que tem a ver com seu problema...

mas 90% é resolvido pela leitura, e cabe à pessoa que resolve o problema lê-lo.

É uma coisa bastante típica - há documentação do serviço Rest-API (você já leu a propósito???) , você tem sorte de eles terem dado um exemplo com o Curl e não há necessidade de analisar outros idiomas... e você tem que usar o WebRequest MT.

A ondulação começa, o protocolo é mostrado na tela - quais cabeçalhos de parâmetros são gerados e enviados, o que é recebido de volta, como é entendido e onde é colocado.

E é diretamente visível o que enviar para WebRequest

---

ler, ler ) A descoberta e o progresso estão sendo feitos.

 
Nikolai Karetnikov:

Acho que estou chegando a algum lugar com a autorização.

Roman, obrigado pelo comentário! Acho que podemos administrar com a autorização também.

Agora sobre alguns parâmetros. Na ajuda sobre WebRequest, diz

[em] Cabeçalhos de consulta do tipo "chave: valor", separados por uma quebra de linha "rn".

Os cabeçalhos variáveis em si são do tipo string

Como assim, a corda contém um caracter de quebra de linha, ou seja, um caracter de quebra de linha?

O cabeçalho pode conter mais de uma chave/cadeia de valores, portanto, é usada uma quebra de linha.
A dupla hifenação"rnr" deve ser colocada no final do cabeçalho.
É assim que o servidor entende o final do cabeçalho, que é um padrão http.
Após a dupla hifenação vem o corpo do pedido ou resposta.

A
funçãoWebRequest separa estes blocos por conveniência.
Para os cabeçalhos, seu próprio parâmetro, para o corpo, seu próprio parâmetro.
Mas a sintaxe de escrever o pedido, exige o cumprimento da norma http.

 
Prossiga, Tenente.
 

//+------------------------------------------------------------------+
//|                                                   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);
     }
  }
//+------------------------------------------------------------------+

a partir deste sitehttps://example-files.online-convert.com/audio/wav/example.wav

baixe este arquivo "exemplo.wav

e depois de baixá-lo, ele tocaPlaySound("Files.wav");

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

Mas o significado desta função ???? Eu não acho!

 

Bem, cavalheiros, vamos seguir em frente, certo?


//+------------------------------------------------------------------+
//|                                                   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);
     }
  }
//+------------------------------------------------------------------+


Antes de mais nada, vamos simplificar ao máximo o próprio código do pedido. Vamos deixar apenas um cabeçalho - a autorização em si, que ainda funciona! Neste caso, sem nenhum cabeçalho adicional, o servidor IBM nos dará um stream em formato de áudio .ogg. Ao diabo com isso, pensamos, vamos fazer algo funcionar primeiro. Vamos abandonar as tentativas fúteis de formatação de fluxo para acenar com cabeçalhos adicionais e lidar com .ogg (a propósito, erro semelhante com a sintaxe WebRequesthttps://www.mql5.com/en/forum/310891#comment_16643324 )

O script é logado no servidor e fica pendurado. Ok, vamos fazer isso em modo de depuração ou algo assim...

vê, não? )


Deixamos cair o script do gráfico, mas por alguma razão ele não pára de executar completamente, apenas interrompe o WebRequest síncrono e continua, o que geralmente é vantajoso para nós.

Vamos em frente. No resultado de char[] temos agora um fluxo .ogg e o escrevemos em um arquivo.

O arquivo também recebe 6Kb (também, porque o caracol ou o carteiro com os mesmos parâmetros retorna um arquivo .ogg de 6Kb, que toca corretamente! É bom ouvir a palavra Teste ))))


Agora nós escrevemos toda a matriz de caracteres para arquivar. Especifique especialmente que não devemos medir o tamanho da matriz, mas tomarWHOLE_ARRAY.

É o que parece agora:

O único problema é que o arquivo de ondulação joga bem, mas nosso arquivo, por alguma razão, não joga.

Vamos ver dentro dos dois arquivos



Arquivo baixado por curl na parte inferior, preenchido do fluxo WebRequest em binário na parte superior

Veja estes blobs 00000089, 00000004 no arquivo superior testmql5.ogg? ))) É um programa de bônus ou o quê? ))) De onde tudo isso veio ))))))))


Resumindo

1. A sintaxe ainda é um mistério para mim. Só conseguiu autenticar no servidor, tentativas de adicionar outros cabeçalhos falharam até agora

2. Eu me pergunto se o WebRequest recebe stream com sprinkles, ou estou escrevendo-o em um arquivo incorretamente, mas o formato de arquivo .ogg obtido a partir do resultado da matriz de caracteres usando o método WebRequest está incorreto.

Tomates podres são bem-vindos!

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:

a partir deste site

baixe este arquivo "exemplo.wav

e depois de baixá-lo, ele tocaPlaySound("Files.wav");

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

Mas o significado desta função ???? Eu não acho que faça sentido!

Alexsandr,

isso é ótimo, obrigado! Mas o arquivo wav deve ser gerado pelo motor TTS (TextToSpeech)

 
Nikolai Karetnikov:

Alexsandr,

Tudo ótimo, obrigado! Mas o arquivo wav deve ser gerado pelo motor TTS (TextToSpeech)

Eu consegui - deve funcionar ???

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

Foto por

aqui está algo semelhantehttps://cloud.yandex.ru/docs/speechkit/tts/request

 
Nikolai Karetnikov:

...

Resumindo

1. A sintaxe ainda é um mistério para mim. Só conseguiu autenticar no servidor, as tentativas de adicionar outros cabeçalhos até agora não foram bem sucedidas

2. Eu me pergunto se o WebRequest recebe o fluxo com sprinkles, ou estou escrevendo-o em um arquivo incorretamente, mas o formato de arquivo .ogg obtido a partir do resultado da matriz de caracteres usando o método WebRequest está incorreto.

Tomates podres são bem-vindos!

Vamos pensar de forma lógica. Alexander mostrou que o script baixa e reproduz o arquivo do outro servidor normalmente. Assim, a webrequest é configurada corretamente. O único problema são as especificidades do servidor da IBM. As peculiaridades de suas respostas aos pedidos.