Semplice POST/GET HttpRequest con mql4 - pagina 2

 

molte grazie!

Sto eseguendo un server apache sul mio computer e uso localhost. Ecco perché non ricevo il messaggio di errore che hai ricevuto tu, ma invece ottengo l'errore "Access violation read to 0x0000007B in 'Wininet.dll'" usando "HttpOpenRequestW".

Hai provato un altro url?

 
anche con il mio codice fisso?
 

Sì, anche con il codice fisso.

Questo è il mio codice:

#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 che se cambio "HttpOpenRequestW" con "HttpOpenRequestA" ricevo anche l'errore 12005.

 
quindi come ho detto prima il codice funziona bene ma c'è un problema con l'URL
 

Beh, non so se è corretto "HttpOpenRequestW" o "HttpOpenRequestA". Ora uso "HttpOpenRequestA" altrimenti ho il messaggio di errore "Access violation read to 0x0000007B in 'Wininet.dll'".

Per quanto riguarda gli URL ho provato tanti altri URL diversi, anche quello del tuo esempio (cambiato POST in GET ecc.):

   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: Non ottieni il messaggio di errore "Access violation read to 0x0000007B in 'Wininet.dll'" se usi "HttpOpenRequestW" nell'ultimo codice?
 

di nuovo come ho detto prima qualcosa è sbagliato con l'URL (i codici di errore non mentono) e naturalmente sto usando "HttpOpenRequestW" e non "HttpOpenRequestA".

Ecco un codice funzionante (restituisce true e non c'è nessun errore):

   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);
 

Ho provato il codice su altri computer e anche su altri computer ottengo ancora l'errore: "Access violation read to 0x0000007B in 'Wininet.dll'" usando "HttpOpenRequestW ".

Sta diventando davvero deludente :-(.

 
coolex:

Ho provato il codice su altri computer e anche su altri computer ottengo ancora l'errore: "Access violation read to 0x0000007B in 'Wininet.dll'" usando "HttpOpenRequestW ".

Sta diventando davvero deludente :-(.


Microsoft dichiara

_In_  LPCTSTR *lplpszAcceptTypes

per ilparametro di accesso . Non sono sicuro che un puntatore alla stringa[] sia compatibile con esso. Proverei a cambiare la stringa[]& in string&.

 

Se faccio la modifica, ricevo il messaggio di errore "'&' - reference cannot used".