Skripte: WININET_TEST

 

WININET_TEST:

Hier ein einfaches Beispiel das demonstriert wie eine Seite(Datei) aus dem Internet mittels der Library wininet.dll heruntergeladen werden kann.

Autor: MetaQuotes Software Corp.

 

Können Sie mir sagen, ob es möglich ist, die Länge einer Datei zu kennen, bevor sie gelesen wird? Dies ist notwendig, um den Prozentsatz der geladenen Daten im Falle großer Mengen und langsamer Geschwindigkeiten abschätzen zu können.

 
gdtt:

Können Sie mir sagen, ob es möglich ist, die Länge einer Datei zu kennen, bevor sie gelesen wird? Damit kann ich den Prozentsatz der heruntergeladenen Daten bei großen Mengen und langsamen Geschwindigkeiten abschätzen.

Ich glaube, das ist möglich. Sie finden es in der msdn-Beschreibung von wininet.dll.

 
gdtt:

Können Sie mir sagen, ob es möglich ist, die Länge einer Datei zu kennen, bevor sie gelesen wird? Dies ist notwendig, um den Prozentsatz der geladenen Daten im Falle großer Mengen und langsamer Geschwindigkeiten abschätzen zu können.

Senden Sie /HEAD vor der /GET-Anfrage
 
sergeev:

Ich glaube, das können Sie. Und Sie finden es in der msdn-Beschreibung von wininet.dll.


Ich nehme an, es wäre ein gutes Thema für einen Artikel mit vollständiger Offenlegung der wininet. dll-Nutzung

 
Es wird ein sehr nützlicher Artikel sein.
 
gdtt:

Können Sie mir sagen, ob es möglich ist, die Länge einer Datei zu kennen, bevor sie gelesen wird? Dies ist notwendig, um den Prozentsatz der heruntergeladenen Daten im Falle großer Mengen und langsamer Geschwindigkeiten abschätzen zu können.

Es besteht die Möglichkeit, dass der Server die Länge des Inhalts meldet.

Um Informationen über die Anfrage zu erhalten, können Sie die Funktion HttpQueryInfo aus wininet.dll verwenden - diese Funktion gibt die erforderlichen Informationen in Form von Strings an das angegebene Array zurück.

Beispiel für die Verwendung:

Fügen Sie im Abschnitt #import eine Beschreibung hinzu:

int HttpQueryInfoW(int hRequest,int dwInfoLevel,uchar &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);

fügen Sie auch

#define HTTP_QUERY_CONTENT_LENGTH 5

dann im Code nach dem Aufruf von InternetOpenUrlW und dem Erhalt von hURL müssen Sie den Code hinzufügen:

   int BufLen=2048;
   int ind=0;
   uchar buf0[2048];
   string s="";
   int ContentSize_HttpQueryInfoW=0;
   int iRes;
   
   iRes=HttpQueryInfoW(hURL,HTTP_QUERY_CONTENT_LENGTH,buf0,BufLen,ind);
   if(iRes<=0)
     {
      Print("Error in call of HttpQueryInfoW()");
     }
   else
     {
      s="";
      for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);}
      Print("HTTP_QUERY_CONTENT_LENGTH:",s);
      if (StringLen(s)>0) ContentSize_HttpQueryInfoW=StringToInteger(s);
      Alert("Inhalt size=",ContentSize_HttpQueryInfoW);
     }     

in unserem Testbeispiel von yandex.ru erhalten wir "Content size= 44649", was der Größe der heruntergeladenen Datei entspricht. d.h. vor dem Start des Downloads (InternetReadFile) kennen wir die Länge des Inhalts.

 

Diese Funktion wurde in der aktuellen Version des Skripts hinzugefügt.

 

Vielen Dank für die Mühe!

Es funktioniert perfekt!

 

Wenn ich versuche, es auszuführen, wird der Metatrader mit einem schwerwiegenden Fehler geschlossen. Jede Lösung?

 
Ich habe festgestellt, dass wininet vor dem letzten MT5-Update funktioniert hat. Aber ich kann immer noch nicht eine Lösung finden, damit es wieder funktioniert. bitte lassen Sie mich wissen, wenn Sie finden, wie dieses Problem zu überwinden.