그리고 다시 dll과 시장 - 페이지 18

 

권한 부여와 함께 고급

Реter Konow :

따라서 Roman에게 WebRequest 를 사용하여 IBM 서버에서 권한을 부여하는 방법을 물어보십시오. 이것이 핵심 질문입니다!

로만, 댓글 감사합니다! 승인을 처리할 수 있다고 생각합니다.

이제 몇 가지 옵션이 있습니다. WebRequest 도움말은 말합니다

【인】 "\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 :

당신이 옳을 것이고, 출력 쌍이 http 요청 헤더에 쓰여지는 우편 배달부의 스크린샷은 다르게 설명됩니다)

나는 우리가 여전히 같은 것에 대해 다른 단어로만 이야기하고 있다고 생각합니다)

나는 비뚤어진 손의 우편 배달부가 어떻게 쓰여졌는지, 그것이 무엇인지, 그것이 당신의 임무와 어떤 관련이 있는지 모릅니다 ...

하지만 90%는 읽기로 해결하고 문제를 푸는 사람은 읽어야 한다.

이것은 상당히 일반적인 것입니다. Rest-API 서비스 문서가 있습니다(그런데 읽어 보셨습니까 ??). 다행스럽게도 curl이 포함된 예제를 제공하고 다른 언어를 구문 분석할 필요가 없습니다. WebRequest MT를 통해 연락해야 합니다.

curl이 시작되고 프로토콜이 화면에 표시됩니다. 매개변수의 헤더가 구성되고 전송된 내용, 다시 수신된 내용, 이해 방법 및 위치가 표시됩니다.

그리고 거기에서 정확히 WebRequest를 보낼 대상을 명확하게 볼 수 있습니다.

---

 
Maxim Kuznetsov :

나는 비뚤어진 손의 우편 배달부가 어떻게 쓰여졌는지, 그것이 무엇인지, 그것이 당신의 임무와 어떤 관련이 있는지 모릅니다 ...

하지만 90%는 읽기로 해결하고 문제를 푸는 사람은 읽어야 한다.

이것은 상당히 일반적인 것입니다. Rest-API 서비스 문서가 있습니다. (그런데 읽어 보셨습니까 ??), 운이 좋게 컬이 포함된 예제를 제공하고 다른 언어를 구문 분석할 필요가 없습니다. WebRequest MT를 통해 연락해야 합니다.

curl이 시작되고 프로토콜이 화면에 표시됩니다. 매개변수의 헤더가 구성되고 전송된 내용, 다시 수신된 내용, 이해 방법 및 위치가 표시됩니다.

그리고 거기에서 정확히 WebRequest를 보낼 대상을 명확하게 볼 수 있습니다.

---

읽기, 읽기) 우리는 이해하고 있으며 이미 진행 상황이 있습니다.

 
Nikolai Karetnikov :

권한 부여와 함께 고급

로만, 댓글 감사합니다! 승인을 처리할 수 있다고 생각합니다.

이제 몇 가지 옵션이 있습니다. WebRequest 도움말은 말합니다

【인】 "\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를 중단하고 계속 진행하므로 일반적으로 좋습니다.

계속해. char result[]에는 이제 .ogg 스트림이 있고 파일에 씁니다.

파일의 크기도 6Kb입니다(또한 원하는 대로 curl 또는 postman 요청이 동일한 매개변수를 사용하여 6Kb .ogg 파일을 반환하므로 정상적으로 재생됩니다! Test라는 단어가 잘 들립니다)))


이제 전체 char 배열을 파일에 씁니다. 특별히 배열의 크기를 측정할 필요는 없지만 WHOLE_ARRAY 를 취함을 나타냅니다.

지금은 너무 아름답습니다.

그것은 단지 문제입니다. 컬 파일은 정상적으로 재생되지만 어떤 이유로 우리 파일은 재생되지 않습니다

두 파일의 내부를 살펴보겠습니다.



아래의 curl에서 다운로드한 파일, 위의 WebRequest 스트림에서 바이너리로 업로드된 파일

상단 testmql5.ogg 파일에 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 파일의 형식이 올바르지 않은지 여부

로튼 토마토 환영합니다!

논리적으로 생각해보자. Alexander는 스크립트가 일반적으로 다른 서버에서 파일을 로드하고 재생한다는 것을 보여주었습니다. 따라서 웹 요청이 올바르게 구성됩니다. 문제는 IBM 서버의 특성에만 있습니다. 요청에 대한 응답 측면에서.