Articles Populaires

Choix De L'Éditeur - 2019

MQL4: apprentissage de la méthode WebRequest

Bonjour tout le monde!

Il n'y a pas si longtemps, dans le cadre d'une leçon sur les positions ouvertes des traders, nous avons pris des données d'un site Web sur le réseau. Ce que nous avons fait ensuite dans la leçon peut être fait d’une autre manière, sans utiliser dll, par conséquent, sans dépendre du système d’exploitation.

Tout ce dont vous avez besoin est d’un terminal Metatrader 4 et d’un éditeur de code mql. Ainsi que la connaissance de la méthode standard mql4 WebRequest, que nous rencontrerons aujourd'hui.

Méthode WebRequest

La méthode WebRequest peut être appelée de deux manières. Le premier convient à l'envoi de requêtes simples à un serveur avec des en-têtes http standard. Cela ressemble à ceci:

int WebRequest (
chaîne constméthode, // méthode HTTP
chaîne consturl, // url
chaîne constbiscuit, // cookie
chaîne constréférant, // référent
intdélai d'attente,    // délai d'attente
const charet données, // tableau du corps du message HTTP
inttaille_données,       // taille du tableau de données en octets
ombleet résultat,        // tableau avec les données de réponse du serveur
ficelle& result_headers// en-têtes de réponse du serveur
);

La deuxième option vous permet de remplir vous-même le tableau d'en-têtes. Ceci est utile dans diverses situations difficiles lorsque, par exemple, vous devez envoyer des fichiers au serveur.

int WebRequest (
chaîne constméthode, // méthode HTTP
chaîne consturl, // url
chaîne consten-têtes, // en-têtes
intdélai d'attente,    // délai d'attente
const charet données, // tableau du corps du message HTTP
ombleet résultat,        // tableau avec les données de réponse du serveur
ficelle& result_headers// en-têtes de réponse du serveur
);

méthode peut être n'importe quelle méthode HTTP. Dans le didacticiel vidéo, nous allons utiliser la méthode GET.

url -L'adresse du serveur auquel vous accédez

cookie -en conséquence, les cookies, par exemple, pour l'autorisation sur le serveur;

référant - valeur de l'en-tête Referer de la requête HTTP;

timeout -délai d'attente en millisecondes, c'est-à-dire le temps d'attente d'une réponse du serveur;

en-têtes -vos en-têtes personnalisés. Lorsque vous utilisez la première option d’appel de méthode, la demande est par défaut envoyée avec l’en-tête: Content-Type: application / x-www-form-urlencoded.

Dans le cas d'un navigateur, le titre pourrait ressembler à ceci, par exemple:

GET / tutorials / HTTP / 1.1
Hôte: tlap.com
Agent utilisateur: Mozilla / 5.0 (Windows; U; Windows NT 6.1; en-US; version: 1.9.1.5) Gecko / 20091102 Firefox / 3.5.5 (.NET CLR 3.5.30729)
Accepter: text / html, application / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8
Accepter-Langue: en-us, en; q = 0.5
Accept-Encoding: gzip, deflate
Jeu de caractères accepté: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Keep-Alive: 300
Connexion: Keep-Alive
Cookie: PHPSESSID = r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Contrôle de cache: no-cache

Dans notre cas, pour envoyer un fichier, vous avez besoin de l'en-tête suivant:

Type de contenu: multipart / form-data; frontière = - WebKitFormBoundaryePkpFF7tjBAqx29L
Contenu-Disposition: données de formulaire; name = "uploadfile"; filename = "hello.tlap" Content-Type: application / x-object

Mais envoyer des fichiers est une tâche plutôt rare, beaucoup plus souvent nous avons juste besoin d’obtenir des données du programme mql4.

La méthode WebRequest renvoie elle-même int, c'est-à-dire un nombre. Ce numéro n'est rien d'autre qu'un code de réponse du serveur, ou -1 en cas d'erreur d'exécution de la méthode. Le code de réponse est un nombre à trois chiffres. Il existe actuellement cinq classes de code:

1xx: informatif - la demande est reçue et comprise, et le traitement continue;
2xx: succès - la demande a été reçue, comprise et traitée avec succès;
3xx: Redirection - d'autres étapes doivent être suivies pour compléter la demande.
4xx: Client Error - la requête a une syntaxe médiocre ou ne peut pas être exécutée;
5xx: Erreur du serveur - Le serveur ne peut pas terminer une demande valide.

Voici quelques exemples les plus courants:

200 OK - Demande réussie. Si le client a demandé des données, celles-ci figurent dans l'en-tête ou le corps du message. Un tel code vient en cas de succès;

301 déplacé en permanence. Le document demandé a finalement été transféré vers la nouvelle URL spécifiée dans le champ Emplacement de l'en-tête. Ce code signifie que la page a été transférée et est maintenant disponible à une adresse différente.

400 mauvaise demande. La requête n'est pas comprise par le serveur en raison d'une erreur de syntaxe. Ce code signifie qu'une faute de frappe s'est produite lors de la demande.

401 non autorisé. La demande nécessite l'identification de l'utilisateur. Ce code signifie que vous devez d'abord vous connecter - entrez le nom d'utilisateur et le mot de passe du site;

403 Interdit. Le serveur a compris la requête, mais il a refusé de la remplir en raison de certaines restrictions d'accès.

404 introuvable. Le serveur a compris la demande, mais n'a pas trouvé la ressource correspondante à l'URL spécifiée. Le plus souvent, ce code indique que la page a simplement été supprimée.

500 Erreur interne du serveur. Toute erreur de serveur interne ne faisant pas partie du reste des erreurs de classe 5xx.

En fait, bien sûr, il y a beaucoup plus de codes. Dans chaque classe, il y en a généralement une douzaine à plusieurs douzaines, mais il est inutile de tout donner ici, d'autant plus que ces informations peuvent être trouvées indépendamment sur le réseau. Je n'ai donné que les codes de réponse les plus courants.

N'oubliez pas d'ajouter l'adresse du site utilisé à la liste des URL autorisées dans le terminal, sinon rien ne fonctionnera. Pour ce faire, appuyez sur Ctrl + O ou accédez à l'onglet Service-> Paramètres-> Conseillers.

Les paramètres doivent être approximativement comme indiqué dans la figure ci-dessus.

Dans votre travail, il convient de considérer que la méthode WebRequest attend une réponse du serveur et que, tant que la réponse n’est pas arrivée, l’exécution du script est impossible. Par conséquent, cet indicateur ne peut pas être utilisé dans l'indicateur. De plus, considérez que l'exécution de la méthode prend du temps et pendant ce temps, le script ou le conseiller ne fera rien d'autre. En particulier, il convient de prendre en compte cette spécificité si vous envoyez des requêtes volumineuses ou recevez des réponses lourdes, par exemple des fichiers volumineux contenant des données.

Conclusion

Aujourd'hui, nous avons analysé la méthode WebRequest, qui offre un moyen assez simple pour vos conseillers et vos scripts d'interagir avec le monde extérieur. En utilisant cette méthode, vous pouvez recevoir des pages Web, télécharger et envoyer des fichiers, effectuer des manipulations automatiques sur le site, etc.

Les possibilités de cette méthode sont vraiment infinies, surtout si vous ne connaissez pas d'autres langages de programmation. En l'utilisant, vous pouvez résoudre des tâches totalement non commerciales, par exemple, créer un autoclicker ou émuler tout autre travail utile sur le réseau qui rapporte de l'argent. C'est une idée amusante, mais si vous travaillez dur, vous pouvez écrire votre internaute, qui gagnera pour vous en un clic tandis que vos principaux robots draineront le dépôt - un rien, mais c'est gentil.

Laissez Vos Commentaires