Simples POST/GET HttpRequest com mql4 - página 2

 

muito obrigado!

Estou rodando um servidor apache em meu computador e utilizo o localhost. É por isso que eu não recebo a mensagem de erro que você recebeu, mas em vez disso recebo o erro "Access violation read to 0x0000007B in 'Wininet.dll'", usando "HttpOpenRequestW".

Você já tentou outra url?

 
mesmo com meu código fixo ?
 

Sim, mesmo com o código fixo.

Este é o meu código:

#import  "Wininet.dll"
   int InternetOpenW(string, int, string, string, int);
   int InternetConnectW(int, string, int, string, string, int, int, int); 
   int InternetOpenUrlW(int, string, string, int, int, int);
   int InternetReadFile(int, string, int, int& OneInt[]);
   int InternetCloseHandle(int); 
   int HttpOpenRequestW(int, string, string, string, string, string& AcceptTypes[], int, int);
   bool HttpSendRequestW(int, string, int, string, int);
#import
#import "kernel32.dll"
int GetLastError(void);
#import
 
int OnInit()
{
   //----
   string headers = "Content-Type: application/x-www-form-urlencoded";
   string data = "";
   string acceptTypes[1] = {"*/*"};

   int HttpOpen = InternetOpenW("HTTP_Client_Sample", 1, "", "", 0);  
   int HttpConnect = InternetConnectW(HttpOpen, "http://localhost/tradex", 7777, "", "", 3, 0, 1);
   int HttpRequest = HttpOpenRequestW(HttpConnect, "POST", "/index.php", "HTTP/1.1", "", acceptTypes, 0, 1);
   bool result = HttpSendRequestW(HttpRequest, headers, StringLen(headers), data, StringLen(data));
   Alert ("Last MSDN Error =: ", kernel32::GetLastError());
   
   int read[1]; // not used
   Print("This is the POST result: ", result);
   if (HttpOpen > 0)
   InternetCloseHandle(HttpOpen);
   if (HttpRequest > 0)
   InternetCloseHandle(HttpRequest);
   
   return;
}

Interessante é que se eu mudar "HttpOpenRequestW" para "HttpOpenRequestA", eu recebo também o erro 12005.

 
Então, como eu disse antes, o código funciona bem, mas há um problema com a URL
 

Bem, não sei se "HttpOpenRequestW" ou "HttpOpenRequestA" está correto. Agora eu uso "HttpOpenRequestA" caso contrário, tenho a mensagem de erro "Access violation read to 0x0000007B in 'Wininet.dll'".

Com relação às URLs, tentei muitas outras URLs diferentes, até mesmo a do seu exemplo (mudou POST para GET etc.):

   int HttpConnect = InternetConnectW(HttpOpen, "http://www.forexfactory.com", 7777, "", "", 3, 0, 1);
   int HttpRequest = HttpOpenRequestA(HttpConnect, "GET", "/ff_calendar_thisweek.xml", "HTTP/1.1", "", acceptTypes, 0, 1);
 
@qjol: Você não recebe a mensagem de erro "Access violation read to 0x0000007B in 'Wininet.dll' " se você usar "HttpOpenRequestW" no último código?
 

novamente como eu disse antes, algo está errado com a URL (os códigos de erro não mentem) e é claro que estou usando "HttpOpenRequestW" e não "HttpOpenRequestA".

aqui está um código de trabalho (retorna verdadeiro e não há erro):

   string headers = "Content-Type: application/x-www-form-urlencoded";
   string data = "";
   string acceptTypes[1] = {""};

   int HttpOpen = InternetOpenW(" ", 0, " ", "", 0);  
   int HttpConnect = InternetConnectW(HttpOpen, "www.forexfactory.com", 80, "", "", 3, 0, 0);
   int HttpRequest = HttpOpenRequestW(HttpConnect, "GET", "ff_calendar_thisweek.xml", "", "", acceptTypes, 0, 0);   
   bool result = HttpSendRequestW(HttpRequest, headers, StringLen(headers), data, StringLen(data));
   Alert ("Last MSDN Error =: ", kernel32::GetLastError());
   int read[1];
   Print("This is the POST result: ", result);
   InternetCloseHandle(HttpOpen);
   InternetCloseHandle(HttpRequest);
 

Testei o código em outros computadores e mesmo em outros computadores ainda recebo o erro: "Access violation read to 0x0000007B in 'Wininet.dll'" usando "HttpOpenRequestW ".

Está ficando realmente decepcionante :-(.

 
coolex:

Testei o código em outros computadores e mesmo em outros computadores ainda recebo o erro: "Access violation read to 0x0000007B in 'Wininet.dll'" usando "HttpOpenRequestW ".

Está ficando realmente decepcionante :-(.


A Microsoft declara

_In_  LPCTSTR *lplpszAcceptTypes

para oparâmetro de acesso . Não tenho certeza se um ponteiro para a corda[] é compatível com ele. Eu tentaria mudar a string[]& para string&.

 

Se eu fizer a mudança, recebo a mensagem de erro "'&' - referência não pode ser usada".