from the nature of the problem you are describing i'm guessing you use B600 >
so you have to adapt your code using UNICODE for example
int InternetOpenW(...
and not (ANSI)
int InternetOpenA(...
Hello everyone,
I know this topic was discussed many times. But all articles I found on that topic were unfortunately too complicated or produce error message because they are too old. Therefore I wasn't able to create a script that does a simple POST/GET request.
So, I simply want to send POST and GET request to a server. The target file is a simple php file.
This is my first testscript I produced which is based on https://www.mql5.com/en/code:
Unfortunately I receive as a result "0" which means the request was not successful. But I can't find out why.
Hope you can help me.
Thanks,
Alex
https://www.mql5.com/en/forum/149321
OK. Thanks for the fast reply. Haven't tested it yet but could you please give some more details? Sorry for asking, but what is B600? Furthermore I can't find documentation for the "InternetOpenW" or the "InternetOpenA" functions on http://msdn.microsoft.com/en-us/library/windows/desktop/aa385098(v=vs.85).aspx
Where does the "...A" and "...W" come from?
Thanks for helping.
but what is B600?
version 600 and above (MetaTrader) = build 600 and above = B600 >
Where does the "...A" and "...W" come from?
i hope you can read
in the very same page in the link you provided says (at the bottom):
Unicode and ANSI names InternetOpenUrlW (Unicode) and InternetOpenUrlA (ANSI)
So, actually I think that for POST/GET request I don't need the function "InternetOpenUrlW" at all.
This is the current code which is still not working :-( :
#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); }
Hi qjol,
in my previous post I wrote that changing "HttpOpenRequestA" into "HttpOpenRequestW" causes the error "Access violation read to 0x0000007B in 'Wininet.dll'".
All other functions I already changed to UNICODE.
I am sorry if I misunderstood but what else is missing or is wrong for a simple POST/GET request?
Hi qjol,
thanks for the link which is very helpful. I can see that to GET data from an URL seems to work but I still don't know how to POST data. Your script defines the function "HttpOpenRequestW" but does not use it. Furthermore the script only retreives data which is working great.
But still how can I POST data? It should work with "HttpOpenRequestW" but as I already posted before I get the error message: "Access violation read to 0x0000007B in 'Wininet.dll'" and "HttpOpenRequestA" obviously is not working.
Hope you can help.
i decided to check your code and i fixed it but since result = false, i checked it out and i'm getting error code 12005 and according to microsoft's error code list it means
ERROR_INTERNET_INVALID_URL
12005
The URL is invalid.
#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 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello everyone,
I know this topic was discussed many times. But all articles I found on that topic were unfortunately too complicated or produce error message because they are too old. Therefore I wasn't able to create a script that does a simple POST/GET request.
So, I simply want to send POST and GET request to a server. The target file is a simple php file.
This is my first testscript I produced which is based on https://www.mql5.com/en/code:
Unfortunately I receive as a result "0" which means the request was not successful. But I can't find out why.
Hope you can help me.
Thanks,
Alex