Aufgrund der Art des von Ihnen beschriebenen Problems gehe ich davon aus, dass Sie B600 verwenden >
also müssen Sie Ihren Code anpassen, indem Sie zum Beispiel UNICODE verwenden
int InternetOpenW(...
und nicht (ANSI)
int InternetOpenA(...
Hallo zusammen,
ich weiß, dass dieses Thema schon oft diskutiert wurde. Aber alle Artikel, die ich zu diesem Thema gefunden habe, waren leider zu kompliziert oder produzieren Fehlermeldungen, weil sie zu alt sind. Daher war ich nicht in der Lage, ein Skript zu erstellen, das eine einfache POST/GET-Anfrage ausführt.
Ich möchte also einfach POST- und GET-Anfragen an einen Server senden. Die Zieldatei ist eine einfache php-Datei.
Dies ist mein erstes Testskript, das ich erstellt habe und das auf https://www.mql5.com/en/code basiert:
Leider erhalte ich als Ergebnis "0", was bedeutet, dass die Anfrage nicht erfolgreich war. Aber ich kann nicht herausfinden, warum.
Hoffentlich können Sie mir helfen.
Vielen Dank!
Alex
https://www.mql5.com/en/forum/149321
GUT. Danke für die schnelle Antwort. Ich habe es noch nicht getestet, aber könnten Sie mir bitte ein paar mehr Details geben? Entschuldigung für die Frage, aber was ist B600? Außerdem kann ich keine Dokumentation für die Funktionen "InternetOpenW" oder "InternetOpenA" auf http://msdn.microsoft.com/en-us/library/windows/desktop/aa385098(v=vs.85).aspx finden.
Woher kommt das "...A" und "...W"?
Vielen Dank für Ihre Hilfe.
aber was ist B600?
Version 600 und höher (MetaTrader) = Build 600 und höher = B600 >
Woher kommt das "...A" und "...W"?
Ich hoffe, Sie können lesen
auf der gleichen Seite in dem von Ihnen angegebenen Link steht(ganz unten):
Unicode- und ANSI-Namen InternetOpenUrlW (Unicode) und InternetOpenUrlA (ANSI)
Ich denke also, dass ich für POST/GET-Anfragen die Funktion "InternetOpenUrlW" gar nicht benötige.
Dies ist der aktuelle Code, der immer noch nicht funktioniert :-( :
#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); }
Ich habe oben geschrieben, dass Sie Ihren Code für UNICODE anpassen müssen, und ich habe Ihnen nur ein Beispiel gegeben, und Sie haben noch Dinge übrig, die Sie anpassen müssen
int HttpOpenRequestA (int, string, string, string, string, string& AcceptTypes[], int, int);
und ich sage dir im Voraus, dass das nicht alles ist, es gibt noch mehr
Hallo qjol,
in meinem vorherigen Beitrag habe ich geschrieben, dass die Änderung von "HttpOpenRequestA" in "HttpOpenRequestW" den Fehler "Access violation read to 0x0000007B in 'Wininet.dll'" verursacht .
Alle anderen Funktionen habe ich bereits auf UNICODE umgestellt.
Es tut mir leid, wenn ich etwas falsch verstanden habe, aber was fehlt noch oder ist falsch für eine einfache POST/GET-Anfrage?
Hallo qjol,
danke für den Link, der sehr hilfreich ist. Ich kann sehen, dass GET-Daten von einer URL zu funktionieren scheint, aber ich weiß immer noch nicht, wie man POST-Daten. Dein Skript definiert die Funktion "HttpOpenRequestW", benutzt sie aber nicht. Außerdem empfängt das Skript nur Daten, was auch gut funktioniert.
Aber wie kann ich trotzdem Daten POSTen? Es sollte mit "HttpOpenRequestW" funktionieren, aber wie ich schon vorher gepostet habe, bekomme ich die Fehlermeldung: "Zugriffsverletzung beim Lesen von 0x0000007B in 'Wininet.dll'" und "HttpOpenRequestA" funktioniert offensichtlich nicht.
Ich hoffe, Sie können helfen.
Ich habe mich entschlossen, Ihren Code zu überprüfen und habe ihn korrigiert, aber da das Ergebnis = falsch ist, habe ich ihn überprüft und erhalte den Fehlercode 12005, der laut Microsofts Fehlercodeliste bedeutet
FEHLER_INTERNET_UNGÜLTIGE_URL
12005
Die URL ist ungültig.
#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;
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen,
ich weiß, dass dieses Thema schon oft diskutiert wurde. Aber alle Artikel, die ich zu diesem Thema gefunden habe, waren leider zu kompliziert oder produzieren Fehlermeldungen, weil sie zu alt sind. Daher war ich nicht in der Lage, ein Skript zu erstellen, das eine einfache POST/GET-Anfrage ausführt.
Ich möchte also einfach POST- und GET-Anfragen an einen Server senden. Die Zieldatei ist eine einfache php-Datei.
Dies ist mein erstes Testskript, das ich erstellt habe und das auf https://www.mql5.com/en/code basiert:
Leider erhalte ich als Ergebnis "0", was bedeutet, dass die Anfrage nicht erfolgreich war. Aber ich kann nicht herausfinden, warum.
Hoffentlich können Sie mir helfen.
Vielen Dank!
Alex