por la naturaleza del problema que describes supongo que utilizas B600 >
porlo que tienes que adaptar tu código usando UNICODE por ejemplo
int InternetOpenW(...
y no (ANSI)
int InternetOpenA(...
Hola a todos,
Sé que este tema se ha discutido muchas veces. Pero todos los artículos que he encontrado sobre este tema eran, por desgracia, demasiado complicados o producen un mensaje de error porque son demasiado antiguos. Por lo tanto, no he podido crear un script que haga una simple petición POST/GET.
Así que, simplemente quiero enviar una petición POST y GET a un servidor. El archivo de destino es un simple archivo php.
Este es mi primer testcript que produje y que está basado en https://www.mql5.com/en/code:
Desgraciadamente recibo como resultado "0" lo que significa que la petición no tuvo éxito. Pero no puedo encontrar la razón.
Espero que me puedan ayudar.
Gracias,
Alex
https://www.mql5.com/en/forum/149321
DE ACUERDO. Gracias por la rápida respuesta. Todavía no lo he probado, pero ¿podría dar más detalles? Perdona que te pregunte, pero ¿qué es B600? Además, no encuentro documentación para las funciones "InternetOpenW" o "InternetOpenA" en http://msdn.microsoft.com/en -us/library/windows/desktop/aa385098(v=vs.85).aspx
¿De dónde salen las funciones "...A" y "...W"?
Gracias por la ayuda.
¿pero qué es B600?
versión 600 y superior (MetaTrader) = build 600 y superior = B600 >
¿De dónde viene la "...A" y la "...W"?
espero que puedas leer
en la misma página en el enlace que has proporcionado dice(al final):
Nombres Unicode y ANSI InternetOpenUrlW (Unicode) e InternetOpenUrlA (ANSI)
Así que, en realidad, creo que para las peticiones POST/GET no necesito la función "InternetOpenUrlW" en absoluto.
Este es el código actual que sigue sin funcionar :-( :
#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 InternetCloseHandle(int); int HttpOpenRequestA (int, string, string, string, string, string& AcceptTypes[], int, int); bool HttpSendRequestW(int, string, int, string, int); #import int OnInit() { string headers = "Content-Type: application/x-www-form-urlencoded"; string data = ""; string acceptTypes[1] = {"*/*"}; int HttpOpen = InternetOpenW("HTTP_Client_Sample", 1, NULL, NULL, 0); int HttpConnect = InternetConnectW(HttpOpen, "http://localhost/tradex", 7777, NULL, NULL, 3, 0, 1); int HttpRequest = HttpOpenRequestA(HttpConnect, "POST", "/index.php", "HTTP/1.1", NULL, acceptTypes, 0, 1); string result = HttpSendRequestW(HttpRequest, headers, StringLen(headers), data, StringLen(data)); int read[1]; Print("This is the POST result: " + result); return(0); }
Hola qjol,
en mi post anterior escribí que cambiar "HttpOpenRequestA" por "HttpOpenRequestW" provoca el error "Access violation read to 0x0000007B in 'Wininet.dll'".
Todas las demás funciones ya las he cambiado a UNICODE.
Lo siento si lo he entendido mal, pero ¿qué más falta o está mal para una simple petición POST/GET?
Hola qjol,
gracias por el enlace que es muy útil. Veo que para GET datos de una URL parece que funciona pero sigo sin saber como POST datos. Tu script define la función "HttpOpenRequestW" pero no la utiliza. Además, el script sólo recupera datos, lo que funciona muy bien.
Pero aún así, ¿cómo puedo enviar datos por correo? Debería funcionar con "HttpOpenRequestW" pero como ya he posteado antes me sale el mensaje de error: "Access violation read to 0x0000007B in 'Wininet.dll'" y "HttpOpenRequestA" obviamente no funciona.
Espero que me puedan ayudar.
Decidí comprobar tu código y lo arreglé pero como el resultado = falso, lo comprobé y estoy recibiendo el código de error 12005 y según la lista de códigos de error de microsoft significa
ERROR_INTERNET_INVALID_URL
12005
La URL no es válida.
#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 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;
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola a todos,
Sé que este tema se ha discutido muchas veces. Pero todos los artículos que he encontrado sobre este tema eran, por desgracia, demasiado complicados o producen un mensaje de error porque son demasiado antiguos. Por lo tanto, no he podido crear un script que haga una simple petición POST/GET.
Así que, simplemente quiero enviar una petición POST y GET a un servidor. El archivo de destino es un simple archivo php.
Este es mi primer testcript que produje y que está basado en https://www.mql5.com/en/code:
Desgraciadamente recibo como resultado "0" lo que significa que la petición no tuvo éxito. Pero no puedo encontrar la razón.
Espero que me puedan ayudar.
Gracias,
Alex