并再次进行dll和营销 - 页 18

 

我想我在授权方面已经有了一些进展。

Реter Konow:

因此,请问Roman如何用WebRequest 在IBM服务器上进行授权,这是一个关键问题!

罗曼,谢谢你的评论!我想我们也会用授权来管理。

现在说说几个参数。在WebRequest的帮助中指出

[in] "key: value "类型的查询标题,用断行符"\r\n "分隔。

变量头本身的类型是字符串

你的意思是,该字符串包含一个换行符,即字符串的结束?

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:

你一定是对的,从postman的截图来看,输出对写在http请求头里的解释是不同的 )

我怀疑我们仍在谈论同一件事,但用词不同 )

我不知道postman写得有多糟糕,它是什么,它与你的问题有什么关系...

但90%是通过阅读解决的,要看解决问题的人是否阅读。

这是很典型的事情--有Rest-API服务的文档(顺便说一下,你读过吗?),你很幸运,他们给了一个用curl的例子,不需要解析其他语言......而你必须使用WebRequest MT。

curl启动后,协议显示在屏幕上--产生和发送哪些参数的头信息,接收到的是什么,如何理解,放在哪里。

而且可以直接看到向WebRequest发送的内容

---

 
Maxim Kuznetsov:

我不知道邮差写得有多糟糕,也不知道它是什么,或者它与你的问题有什么关系...

但90%是通过阅读解决的,要看解决问题的人是否阅读。

这是很典型的事情--有Rest-API服务的文档(顺便说一下,你读过吗?),你很幸运,他们给了一个用curl的例子,不需要解析其他语言......而你必须使用WebRequest MT。

curl启动后,协议显示在屏幕上--产生和发送哪些参数的头信息,接收到的是什么,如何理解,放在哪里。

而且可以直接看到向WebRequest发送的内容

---

读取,读取 )正在摸索,正在取得进展。

 
Nikolai Karetnikov:

我想我快成功了。

罗曼,谢谢你的评论!我想我们也会处理好授权的问题。

现在说说几个参数。在WebRequest的帮助中,它说

[in] "key: value "类型的查询标题,用断行符"\r\n "分隔。

变量头本身的类型是字符串

你的意思是,该字符串包含一个换行符,即换行符?

头部可能包含一个以上的键/值字符串,所以要使用换行符。
双连字符"\r\n\r\n" 必须放在标题的最后。
这是服务器如何理解头的结束,这是一个http标准。
在双连字符之后是请求或响应的主体。
方便起见,WebRequest函数 将这些块分开。
对于标题来说是自己的参数,对于正文来说是自己的参数。
但是写请求的语法,需要遵守标准的http。

 
继续吧,中尉。
 

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

从这个网站https://example-files.online-convert.com/audio/wav/example.wav

下载这个"example.wav " 文件

并在下载后,播放PlaySound("\\Files\\example.wav")

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

但这个功能的意义是什么呢?我不这么认为!

 

好了,先生们,让我们继续前进,好吗?


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


首先,让我们尽可能地简化请求本身的代码。我们只留下一个标头--授权本身,它仍然可以工作!在这种情况下,没有任何额外的标头,IBM服务器将给我们一个.ogg音频格式的流。让它见鬼去吧,我们想,让我们先做一些工作。让我们放弃徒劳的尝试,用额外的头文件将流媒体格式化为wav,并处理.ogg(顺便说一下,WebRequest语法的类似错误https://www.mql5.com/en/forum/310891#comment_16643324)。

脚本被登录到服务器并挂起。好吧,让我们以调试模式或其他方式运行它...

看,不是吗?)


我们把脚本从图中删除,但由于某些原因,它并没有完全停止执行,它只是中断了同步WebRequest并继续执行,这通常对我们有利。

让我们继续前进。在char result[]中,我们现在有一个.ogg流,我们把它写到一个文件。

文件也得到了6Kb(同时,因为使用相同参数的curl或postman查询返回6Kb的.ogg文件,可以正常播放!)。很高兴听到测试这个词 ))))


现在我们把所有的char数组写到文件里。特别说明的是,我们不应该测量数组的大小,而是采取WHOLE_ARRAY

这就是它现在的样子。

唯一的问题是,curl文件可以正常播放,但我们的文件,由于某些原因,不能播放。

让我们看看这两个文件的内容



文件在底部由curl下载,在顶部由WebRequest流填充成二进制文件

看到顶部文件testmql5.ogg中的这些blobs 00000089, 00000004吗?)))这是个奖金计划还是什么?)))这一切从何而来 ))))))))


归纳总结

1.语法对我来说仍然是个谜。只设法对服务器进行了认证,到目前为止,试图添加其他头信息的尝试都失败了。

2.我想知道WebRequest收到的流是否有洒落,或者我把它写到了一个文件中,但使用WebRequest方法从char数组结果得到的.ogg文件格式是不正确的。

烂番茄的欢迎!

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:

从这个网站https://example-files.online-convert.com/audio/wav/example.wav

下载这个"example.wav " 文件

并在下载后,播放PlaySound("\\Files\\example.wav")

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

但这个功能的意义是什么呢?我不认为这有什么意义!

阿列克山大。

这很好,谢谢!但是wav文件应该是由TTS引擎(TextToSpeech)生成的。

 
Nikolai Karetnikov:

阿列克山大。

都很好,谢谢!但是wav文件应该是由TTS引擎(TextToSpeech)生成的。

我知道了--它应该可以工作。

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

图片来源

这里有类似的东西https://cloud.yandex.ru/docs/speechkit/tts/request

 
Nikolai Karetnikov:

...

总结

1.语法对我来说仍然是个谜。只设法对服务器进行了认证,到目前为止,尝试添加其他头信息都不成功。

2.我想知道WebRequest收到的流是否有洒落,或者我把它写到了一个文件中,但使用WebRequest方法从char数组结果得到的.ogg文件格式是不正确的。

烂番茄的欢迎!

让我们从逻辑上思考。亚历山大表明,该脚本从其他服务器下载并正常播放文件。因此,webrequest的设置是正确的。唯一的问题是IBM的服务器的具体情况。他们对请求的反应的特殊性。