Simple POST/GET HttpRequest avec mql4 - page 2

 

Merci beaucoup !

Je fais tourner un serveur Apache sur mon ordinateur et j'utilise localhost. C'est pourquoi je n'obtiens pas le message d'erreur que vous avez obtenu, mais plutôt l'erreur "Access violation read to 0x0000007B in 'Wininet.dll'" lorsque j'utilise "HttpOpenRequestW".

Avez-vous essayé une autre url ?

 
même avec mon code fixe ?
 

Oui, même avec le code corrigé.

Voici mon code :

#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;
}

Il est intéressant de noter que si je change "HttpOpenRequestW" en "HttpOpenRequestA", je reçois également l'erreur 12005.

 
Comme je l'ai déjà dit, le code fonctionne bien mais il y a un problème avec l'URL.
 

Je ne sais pas si "HttpOpenRequestW" ou "HttpOpenRequestA" est correct. Maintenant, j'utilise "HttpOpenRequestA", sinon j'ai le message d'erreur "Access violation read to 0x0000007B in 'Wininet.dll'".

En ce qui concerne les URL, j'ai essayé de nombreuses autres URL, même celle de votre exemple (en remplaçant POST par GET, etc.) :

   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 : N'obtenez-vous pas le message d'erreur "Access violation read to 0x0000007B in 'Wininet.dll'" si vous utilisez "HttpOpenRequestW" dans le dernier code ?
 

comme je l'ai déjà dit, il y a un problème avec l'URL (les codes d'erreur ne mentent pas) et bien sûr j'utilise "HttpOpenRequestW" et non "HttpOpenRequestA".

Voici un code qui fonctionne (il retourne vrai et il n'y a pas d'erreur) :

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

J'ai testé le code sur d'autres ordinateurs et même sur d'autres ordinateurs, je continue à obtenir l'erreur suivante : "Access violation read to 0x0000007B in 'Wininet.dll'" en utilisant "HttpOpenRequestW ".

Cela devient vraiment décevant :-(.

 
coolex:

J'ai testé le code sur d'autres ordinateurs et même sur d'autres ordinateurs, je continue à obtenir l'erreur suivante : "Access violation read to 0x0000007B in 'Wininet.dll'" en utilisant "HttpOpenRequestW ".

Cela devient vraiment décevant :-(.


Microsoft déclare

_In_  LPCTSTR *lplpszAcceptTypes

pour leparamètre d' accès . Je ne suis pas sûr qu'un pointeur sur la chaîne[] soit compatible avec celui-ci. J'essaierais de changer la chaîne[]& en chaîne&.

 

Si je fais la modification, je reçois le message d'erreur "'&' - reference cannot used".

Raison: