Simple POST/GET HttpRequest con mql4 - página 2

 

¡muchas gracias!

Estoy ejecutando un servidor apache en mi ordenador y uso localhost. Por eso no me aparece el mensaje de error que tienes pero en cambio me aparece el error "Access violation read to 0x0000007B in 'Wininet.dll'" i using "HttpOpenRequestW".

¿Has probado con otra url?

 
¿incluso con mi código fijo?
 

Sí, incluso con el código fijo.

Este es mi 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;
}

Lo interesante es que si cambio "HttpOpenRequestW" por "HttpOpenRequestA" también recibo el error 12005.

 
como dije antes el código funciona bien pero hay un problema con la URL
 

Pues no sé si es correcto "HttpOpenRequestW" o "HttpOpenRequestA". Ahora utilizo"HttpOpenRequestA" de lo contrario tengo el mensaje de error "Access violation read to 0x0000007B in 'Wininet.dll'".

En cuanto a las URLs, he probado muchas otras, incluso la de tu ejemplo (cambiando POST por 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: ¿No te aparece el mensaje de error "Access violation read to 0x0000007B in 'Wininet.dll'" si utilizas "HttpOpenRequestW" en el último código?
 

de nuevo como dije antes algo esta mal con la URL (los códigos de error no mienten) y por supuesto estoy usando "HttpOpenRequestW" y no "HttpOpenRequestA"

aquí hay un código que funciona (devuelve true y no hay error):

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

He probado el código en otros ordenadores e incluso en otros ordenadores sigo obteniendo el error: "Access violation read to 0x0000007B in 'Wininet.dll'" using "HttpOpenRequestW ".

Se está volviendo realmente decepcionante :-(.

 
coolex:

He probado el código en otros ordenadores e incluso en otros ordenadores sigo obteniendo el error: "Access violation read to 0x0000007B in 'Wininet.dll'" using "HttpOpenRequestW ".

Se está volviendo realmente decepcionante :-(.


Microsoft declara

_In_  LPCTSTR *lplpszAcceptTypes

para elparámetro de acceso . No estoy seguro de que un puntero a la cadena[] sea compatible con ella. Yo probaría a cambiar la cadena[ ]& por cadena&.

 

Si hago el cambio recibo el mensaje de error "'&' - no se puede utilizar la referencia".

Razón de la queja: