Простой POST/GET HttpRequest с помощью mql4 - страница 2

 

большое спасибо!

Я запускаю сервер apache на своем компьютере и использую localhost. Поэтому я не получаю сообщение об ошибке, которое получили вы, но вместо этого я получаю ошибку "Access violation read to 0x0000007B in 'Wininet.dll'" i using "HttpOpenRequestW".

Пробовали ли вы использовать другой 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
 
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;
}

Интересно, что если я меняю "HttpOpenRequestW" на "HttpOpenRequestA", я также получаю ошибку 12005.

 
Как я уже говорил, код работает нормально, но есть проблема с URL
 

Ну, я не знаю, какой из вариантов "HttpOpenRequestW" или "HttpOpenRequestA" является правильным. Сейчас я использую "HttpOpenRequestA", иначе у меня появляется сообщение об ошибке "Access violation read to 0x0000007B in 'Wininet.dll'".

Что касается URL-адресов, я перепробовал множество других URL-адресов, даже тот, который приведен в вашем примере (изменил POST на GET и т.д.):

   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: Не получите ли вы сообщение об ошибке "Access violation read to 0x0000007B in 'Wininet.dll'" , если вы используете "HttpOpenRequestW" в последнем коде?
 

опять же, как я уже говорил, что-то не так с URL ( коды ошибок не врут) и, конечно, я использую "HttpOpenRequestW", а не "HttpOpenRequestA".

Вот рабочий код (возвращает true и нет ошибки):

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

Я протестировал код на других компьютерах, и даже на них я все еще получаю ошибку: "Access violation read to 0x0000007B in 'Wininet.dll'" using "HttpOpenRequestW ".

Это становится действительно разочаровывающим :-(.

 
coolex:

Я протестировал код на других компьютерах, и даже на них я все еще получаю ошибку: "Access violation read to 0x0000007B in 'Wininet.dll'" using "HttpOpenRequestW ".

Это становится действительно разочаровывающим :-(.


Microsoft декларирует

_In_  LPCTSTR *lplpszAcceptTypes

дляпараметра доступа . Я не уверен, что указатель на string[] совместим с ним. Я бы попробовал заменить string[]& на string&.

 

Если я выполню изменение, то получу сообщение об ошибке "'&' - ссылка не может быть использована".