Einfache POST/GET HttpRequest mit mql4 - Seite 2

 

vielen Dank!

Ich betreibe einen Apache-Server auf meinem Computer und verwende localhost. Deshalb bekomme ich nicht die Fehlermeldung, die Sie bekommen haben, sondern stattdessen den Fehler "Access violation read to 0x0000007B in 'Wininet.dll'", wenn ich "HttpOpenRequestW" verwende.

Haben Sie eine andere Url versucht?

 
auch mit meinem festen Code?
 

Ja, sogar mit dem festen Code.

Dies ist mein 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;
}

Interessant ist, dass wenn ich "HttpOpenRequestW" in "HttpOpenRequestA" ändere, erhalte ich auch den Fehler 12005.

 
so wie ich sagte, bevor der Code funktioniert gut, aber es gibt ein Problem mit URL
 

Nun, ich weiß nicht, ob "HttpOpenRequestW" oder "HttpOpenRequestA" richtig ist. Jetzt verwende ich "HttpOpenRequestA", da ich sonst die Fehlermeldung "Access violation read to 0x0000007B in 'Wininet.dll'" bekomme .

Bezüglich der URLs habe ich so viele verschiedene URLs ausprobiert, sogar die aus Ihrem Beispiel (POST in GET geändert usw.):

   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: Erhalten Sie nicht die Fehlermeldung "Access violation read to 0x0000007B in 'Wininet.dll'" , wenn Sie "HttpOpenRequestW" im letzten Code verwenden?
 

wieder wie ich sagte, bevor etwas mit der URL falsch ist (die Fehlercodes lügen nicht) und natürlich bin ich mit "HttpOpenRequestW" und nicht "HttpOpenRequestA"

hier ist ein funktionierender Code (gibt true zurück und es gibt keinen Fehler):

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

Ich habe den Code auf anderen Computern getestet und selbst auf anderen Computern erhalte ich immer noch die Fehlermeldung: "Access violation read to 0x0000007B in 'Wininet.dll'" mit "HttpOpenRequestW ".

Es wird wirklich enttäuschend :-(.

 
coolex:

Ich habe den Code auf anderen Computern getestet und selbst auf anderen Computern erhalte ich immer noch die Fehlermeldung: "Access violation read to 0x0000007B in 'Wininet.dll'" mit "HttpOpenRequestW ".

Das ist wirklich enttäuschend :-(.


Microsoft deklariert

_In_  LPCTSTR *lplpszAcceptTypes

für denZugriffsparameter. Ich bin mir nicht sicher, ob ein Zeiger auf den string[] damit kompatibel ist. Ich würde versuchen, den string[]& in string& zu ändern .

 

Wenn ich die Änderung vornehme, erhalte ich die Fehlermeldung "'&' - reference cannot used".