Diskussion zum Artikel "Die Verwendung von WinInet in MQL5 Teil 2: POST-Anfragen und -Dateien"

 

Neuer Artikel Die Verwendung von WinInet in MQL5 Teil 2: POST-Anfragen und -Dateien :

In diesem Artikel werden wir uns weiterhin mit den Grundlagen von internetbasierten HTTP-Anfragen und dem Informationsaustausch mit Servern befassen. Es werden neue Funktionen der CMqINet-Klasse, Methoden der Informationsübertragung mit Formularen, das Senden von Dateien mit POST-Anfragen sowie Autorisierungen auf Webseiten mit Ihrem Login unter Verwendung von Cookies behandelt.

In dieser Lektion lernen wir:

  • wie man einfache POST-Anfragen erstellt und an einen Server schickt
  • wie man Daten mit der multipart/form-data-Methode an einen Server schickt
  • wie man mit Cookies arbeitet und Informationen einer Webseite mit seinem Login liest.

Ich empfehle Ihnen hier nochmals ausdrücklich, den lokalen Proxy Server Charles zu installieren, der für weiterführendes Lernen und Experimente notwendig sein wird.

Autor: o_O

 

Hallo Alex,

Guter Artikel - ich habe eine Anfrage für 'Teil 3': XML-RPC-Client-Kommunikation (und Server, wenn möglich).

Herzlichen Glückwunsch

 

Wenn die folgende Anweisungausgeführt wird, stürzt das System ab. Wie sollte dies behoben werden?

hConnect=InternetConnectW(hSession, aHost, aPort, aUser, aPass, aService, 0, 0);

Fehler: Zugriffsverletzung beim Lesen auf 0x0000000000001F94 in '......ex5'

 

Es gibt einen kleinen Fehler in Zeile 161. Diese Zeile sollte lauten:

else StringToCharArray(req.stData, data, 0, StringLen(req.stData));

Das liegt daran, dass Terminal 0 in das Array kopiert wird und HttpSendRequestW das Terminal 0 (wie ein zusätzliches Zeichen) an den letzten Post-Var-Wert sendet. Zum Beispiel, wenn Ihre Daten sind:

var1=value1&var2=value2

Sie erhalten in Ihrer Webseite var1, die mit value1 verbunden ist, und var2, die mit value2\0 verbunden ist.

Dies ist ein großartiger Artikel. Danke, dass Sie ihn geteilt haben.


Mit freundlichen Grüßen

 
nach dem letzten MT5-Upgrade kann das Wininet nicht mehr verwendet werden, es wird ein Zugriffsverletzungsfehler erzeugt. Gibt es Vorschläge, um diesen Fehler zu beheben? Lösungen? Ich habe versucht, ohne Erfolg.
 
Der Zugriffsverletzungsfehler wurde behoben, aber die POST-Anfragen funktionieren jetzt nicht. Offenbar werden die Daten in einem uchar-Array nicht korrekt an die DLL-Funktion gesendet.
 
mundoforex:

Der Zugriffsverletzungsfehler wurde behoben, aber die POST-Anfragen funktionieren jetzt nicht. Offenbar werden die Daten in einem uchar-Array nicht korrekt an die DLL-Funktion gesendet.
Ich bin immer noch mit Zugriffsverletzung Fehler nach einiger Zeit.
 
Warum kümmert sich niemand um dieses Problem?
 
mundoforex:

Warum kümmert sich niemand um dieses Problem?
Ich bin bei dir... Ich warte verzweifelt auf eine Lösung, aber niemand antwortet. Ich dachte, das letzte Update würde das Problem lösen, wie mir die Admins sagten, aber nach dem Update haben sie mir nie wieder geantwortet :(
 

Ich hatte auch einige Access Violation Fehler mit dieser Objektklasse. Das Problem lag in der Verwendung von '0' als NULL-Zeiger im Aufruf der Funktion HttpOpenRequestW. Versuchen Sie, den Aufruf zu ersetzen

---   hRequest=HttpOpenRequestW(hConnect, req.stVerb, req.stObject, Vers, nill, 0, INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 0); 

durch einen Aufruf zu ersetzen:

+++   hRequest=HttpOpenRequestW(hConnect, req.stVerb, req.stObject, Vers, NULL, NULL , INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 0); 


Es ist lustig, dass die unsachgemäße Verwendung von NULL-Zeigern sogar explizit als Absturzursache in der MSDN-Dokumentation erwähnt wird:

Failing to properly terminate the array with a NULL pointer will cause a crash.
HttpOpenRequest function (Windows)
  • msdn.microsoft.com
Creates an HTTP request handle. Syntax Parameters hConnect [in] lpszVerb [in] A pointer to a null-terminated string that contains the HTTP verb to use in the request. If this parameter is NULL, the function uses GET as the HTTP verb. lpszObjectName [in] A pointer to a null-terminated string that contains the name of the target object of the...
 

Ich versuche, einen Bericht über Produkte aus meinem Profil abzurufen, aber ich kann es nicht, was mache ich falsch?