Você está na página 1de 2

WebRequest Page 1 of 2

Referência MQL5 / Funções de rede / WebRequest

WebRequest
A função envia uma solicitação HTTP para um servidor especificado. A função possui duas versões:
1. Enviando solicitações simples do tipo "key = value" usando o cabeçalho Content-Type: application/x-www-form-urlencoded.
int WebRequest(
const string method, // método HTTP
const string url, // URL
const string cookie, // cookie
const string referer, // referer
int timeout, // tempo esgotado
const char &data[], // A matriz do corpo da mensagem HTTP
int data_size, // tamanho do array data[] em bytes
char &result[], // Uma matriz contendo dados de resposta do servidor
string &result_headers // cabeçalhos de resposta do servidor
);

2. Enviando uma solicitação de qualquer tipo especificando o conjunto personalizado de cabeçalhos para uma interação mais flexível com vários serviços da
Web.
int WebRequest(
const string method, // método HTTP
const string url, // URL
const string headers, // cabeçalho
int timeout, // tempo esgotado
const char &data[], // A matriz do corpo da mensagem HTTP
char &result[], // Uma matriz contendo dados de resposta do servidor
string &result_headers // cabeçalhos de resposta do servidor
);

Parâmetros
método
[in] método HTTP.
url
[in] URL.
cabeçalho
[in] Cabeçalhos de solicitação do tipo "key: valor", separados por uma quebra de linha "\r\n".
cookie
[in] Valor do cookie.
referer
[in] Valor do cabeçalho Referer do pedido HTTP.
timeout
[in] Tempo limite em milissegundos.
data[]
[in] Matriz de dados do corpo da mensagem HTTP.
data_size
[in] Tamanho do array data[].
result[]
[out] Um array contendo dados de resposta do servidor.
result_headers
[out] Cabeçalhos de resposta do servidor.
Valor retornado
Código de resposta do servidor HTTP ou -1 para um erro.
Nota
Para usar a função WebRequest(), adicione os endereços dos servidores necessários na lista de URLs permitidos na guia "Expert Advisors" da janela "Options". A
porta do servidor é automaticamente selecionada com base no protocolo especificado - 80 para "http://" e 443 para "https://".
A função WebRequest() é síncrona, o que significa que interrompe a execução do programa e aguarda a resposta do servidor solicitado. Uma vez que os atrasos
na recepção de uma resposta podem ser grandes, a função não está disponível para chamadas a partir dos indicadores, porque os indicadores são executados em
uma linha comum compartilhada por todos os indicadores e gráficos em um símbolo. O atraso de desempenho do indicador em um dos gráficos de um símbolo
pode interromper a atualização de todos os gráficos do mesmo símbolo.
A função pode ser chamada somente de Expert Advisors e scripts, como eles executam em seus próprios tópicos de execução. Se você tentar chamar a função de
um indicador, GetLastError() retornará o erro 4014 – "Função não é permitida".
O WebRequest() não pode ser executada no Testador de Estratégia.
Um exemplo de usar a primeira versão da função WebRequest():

mk:@MSITStore:c:\users\jpsil\appdata\roaming\metaquotes\terminal\help\mql5_port... 12/01/2024
WebRequest Page 2 of 2

void OnStart()
{
string cookie=NULL,headers;
char post[],result[];
string url="https://finance.yahoo.com";
//--- para trabalhar com o servidor é necessário adicionar a URL "https://finance.yahoo.com"
//--- na lista de URLs permitidas (menu Principal->Ferramentas->Opções, guia "Experts"):
//--- redefinimos o código do último erro
ResetLastError();
//--- download da página html do Yahoo Finance
int res=WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
if(res==-1)
{
Print("Erro no WebRequest. Código de erro =",GetLastError());
//--- é possível que a URL não esteja na lista, exibimos uma mensagem sobre a necessidade de adicioná-la
MessageBox("É necessário adicionar um endereço '"+url+"' à lista de URL permitidas na guia 'Experts'","Erro",MB_ICONINFORMATION);
}
else
{
if(res==200)
{
//--- download bem-sucedido
PrintFormat("O arquivo foi baixado com sucesso, tamanho %d bytes.",ArraySize(result));
//PrintFormat("Cabeçalhos do servidor: %s",headers);
//--- salvamos os dados em um arquivo
int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
//--- armazenamos o conteúdo do array result[] no arquivo
FileWriteArray(filehandle,result,0,ArraySize(result));
//--- fechamos o arquivo
FileClose(filehandle);
}
else
Print("Erro em FileOpen. Código de erro =",GetLastError());
}
else
PrintFormat("Erro de download '%s', código %d",url,res);
}
}

mk:@MSITStore:c:\users\jpsil\appdata\roaming\metaquotes\terminal\help\mql5_port... 12/01/2024

Você também pode gostar