pela natureza do problema que você está descrevendo estou supondo que você usa B600 >
por isso você tem que adaptar seu código usando UNICODE, por exemplo
int InternetOpenW(...
e não (ANSI)
int InternetOpenA(...
Olá a todos,
Eu sei que este tópico foi discutido muitas vezes. Mas todos os artigos que encontrei sobre esse tópico foram infelizmente muito complicados ou produziram mensagens de erro porque são muito antigos. Portanto, não fui capaz de criar um roteiro que fizesse um simples pedido POST/GET.
Portanto, eu simplesmente quero enviar um pedido de POST e GET para um servidor. O arquivo alvo é um simples arquivo php.
Este é o meu primeiro script de teste que produzi e que se baseia em https://www.mql5.com/en/code:
Infelizmente, recebo como resultado "0", o que significa que o pedido não foi bem sucedido. Mas não consigo descobrir o porquê.
Espero que você possa me ajudar.
Obrigado,
Alex
https://www.mql5.com/en/forum/149321
OK. Obrigado pela resposta rápida. Ainda não a testamos, mas você poderia dar mais detalhes? Desculpe por perguntar, mas o que é B600? Além disso, não consigo encontrar documentação para as funções "InternetOpenW" ou "InternetOpenA" em http://msdn.microsoft.com/en-us/library/windows/desktop/aa385098(v=vs.85).aspx
De onde vêm os "...A" e "...W"?
Obrigado por ajudar.
mas o que é B600?
versão 600 e acima (MetaTrader) = construir 600 e acima = B600 >
De onde vêm os "...A" e "...W"?
espero que você possa ler
na mesma página no link que você forneceu diz(na parte inferior):
Unicode e ANSI nomeia InternetOpenUrlW (Unicode) e InternetOpenUrlA (ANSI)
Portanto, na verdade eu acho que para o pedido POST/GET não preciso da função "InternetOpenUrlW" de forma alguma.
Este é o código atual que ainda não está funcionando :-( :
#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); }
escrevi acima que você precisa adaptar seu código para UNICODE e dei apenas um exemplo e você ainda deixou coisas que você precisa adaptar para
int HttpOpenRequestA (int, string, string, string, string, string& AcceptTypes[], int, int);
e estou lhe dizendo com antecedência que não é tudo, há mais
Olá qjol,
em meu post anterior escrevi que a mudança de "HttpOpenRequestA" para "HttpOpenRequestW" causa o erro "Access violation read to 0x0000007B in 'Wininet.dll'".
Todas as outras funções eu já mudei para UNICODE.
Sinto muito se entendi mal, mas o que mais está faltando ou está errado para um simples pedido POST/GET?
Olá qjol,
obrigado pela ligação, que é muito útil. Posso ver que para GET dados de uma URL parece funcionar, mas ainda não sei como POSTar dados. Seu script define a função "HttpOpenRequestW", mas não a utiliza. Além disso, o script só recupera dados que estão funcionando muito bem.
Mas ainda assim, como eu posso POSTar dados? Deve funcionar com "HttpOpenRequestW", mas como eu já postei antes de receber a mensagem de erro: "Violação de acesso lida em 0x0000007B em 'Wininet.dll'" e "HttpOpenRequestA" obviamente não está funcionando.
Espero que você possa ajudar.
decidi verificar seu código e corrigi-o, mas como resultado = falso, verifiquei-o e estou recebendo o código de erro 12005 e de acordo com a lista de códigos de erro da Microsoft isso significa
ERROR_INTERNET_INVALID_URL
12005
A URL é invá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;
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá a todos,
Eu sei que este tópico foi discutido muitas vezes. Mas todos os artigos que encontrei sobre esse tópico foram infelizmente muito complicados ou produziram mensagens de erro porque são muito antigos. Portanto, não fui capaz de criar um roteiro que fizesse um simples pedido POST/GET.
Portanto, eu simplesmente quero enviar um pedido de POST e GET para um servidor. O arquivo alvo é um simples arquivo php.
Este é o meu primeiro script de teste que produzi e que se baseia em https://www.mql5.com/en/code:
Infelizmente recebo como resultado "0", o que significa que o pedido não foi bem sucedido. Mas não consigo descobrir o porquê.
Espero que você possa me ajudar.
Obrigado,
Alex