судя по характеру описанной вами проблемы, я предполагаю, что вы используете B600 >
поэтому вы должны адаптировать свой код, используя, например, UNICODE
int InternetOpenW(...
а не (ANSI)
int InternetOpenA(...
Привет всем,
Я знаю, что эта тема обсуждалась много раз. Но все статьи, которые я нашел на эту тему, к сожалению, были слишком сложными или выдавали сообщение об ошибке, потому что они слишком старые. Поэтому я не смог создать скрипт, который выполняет простой POST/GET запрос.
Итак, я просто хочу отправить POST и GET запросы на сервер. Целевой файл - это простой php-файл.
Это мой первый тестовый скрипт, который я создал на основе https://www.mql5.com/en/code:
К сожалению, я получаю в качестве результата "0", что означает, что запрос не был успешным. Но я не могу выяснить причину.
Надеюсь, вы сможете мне помочь.
Спасибо,
Алекс
https://www.mql5.com/en/forum/149321
OK. Спасибо за быстрый ответ. Я еще не тестировал его, но не могли бы вы дать более подробную информацию? Извините за вопрос, но что такое B600? Кроме того, я не могу найти документацию для функций "InternetOpenW" или "InternetOpenA" на сайте http://msdn.microsoft.com/en-us/library/windows/desktop/aa385098(v=vs.85).aspx.
Откуда берутся "...A" и "...W"?
Спасибо за помощь.
но что такое B600?
версия 600 и выше (MetaTrader) = сборка 600 и выше = B600 >
Откуда берутся "...A" и "...W"?
надеюсь, вы можете прочитать
на той же странице в приведенной вами ссылке написано(в самом низу):
Unicode и ANSI имена InternetOpenUrlW (Unicode) и InternetOpenUrlA (ANSI)
Таким образом, я думаю, что для POST/GET запросов мне вообще не нужна функция "InternetOpenUrlW".
Это текущий код, который все еще не работает :-( :
#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); }
Я написал выше, что вам нужно адаптировать ваш код для UNICODE, и я привел вам только один пример, и вы все еще оставили то, что вам нужно адаптировать для
int HttpOpenRequestA (int, string, string, string, string, string& AcceptTypes[], int, int);
и я заранее говорю вам, что это еще не все, есть еще кое-что.
Здравствуйте qjol,
В своем предыдущем сообщении я писал, что замена "HttpOpenRequestA" на "HttpOpenRequestW" вызывает ошибку "Access violation read to 0x0000007B in 'Wininet.dll'".
Все остальные функции я уже изменил на UNICODE.
Извините, если я неправильно понял, но что еще не хватает или неправильно для простого POST/GET запроса?
Здравствуйте, qjol,
Спасибо за ссылку, которая очень полезна. Я вижу, что получение данных с URL работает, но я все еще не знаю, как отправить данные. Ваш скрипт определяет функцию "HttpOpenRequestW", но не использует ее. Более того, скрипт только получает данные, что работает отлично.
Но все же как я могу размещать данные? Он должен работать с "HttpOpenRequestW", но, как я уже писал ранее, я получаю сообщение об ошибке: "Access violation read to 0x0000007B in 'Wininet.dll'" и "HttpOpenRequestA", очевидно, не работает.
Надеюсь, вы сможете помочь.
Я решил проверить ваш код и исправил его, но так как result = false, я проверил его и получаю код ошибки 12005, а согласно списку кодов ошибок microsoft это означает следующее
ERROR_INTERNET_INVALID_URL
12005
URL недействителен.
#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;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет всем,
Я знаю, что эта тема обсуждалась много раз. Но все статьи, которые я нашел на эту тему, к сожалению, были слишком сложными или выдавали сообщение об ошибке, потому что они слишком старые. Поэтому я не смог создать скрипт, который выполняет простой POST/GET запрос.
Итак, я просто хочу отправить POST и GET запросы на сервер. Целевой файл - это простой php-файл.
Это мой первый тестовый скрипт, который я создал на основе https://www.mql5.com/en/code:
К сожалению, я получаю в качестве результата "0", что означает, что запрос не был успешным. Но я не могу выяснить причину.
Надеюсь, вы сможете мне помочь.
Спасибо,
Алекс