Comprendre la transmission par GET vers un serveur WEB
publication: 4 août 2022 / mis à jour 5 août 2022
Appel à collaboration
Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.
Partagez-les ici sur ce site.
ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.
Vos montages peuvent aider d'autres développeurs.
Les montages des autres développeurs peuvent vous aider.
Pour proposer un article ou un montage, cliquez ici
Transmission de données vers un serveur par GET
Il existe deux méthodes de transmission de données depuis une page web vers un serveur web:
- POST qui est la méthode généralement utilisée depuis les formulaires
- GET qui est la méthode que nous allons étudier
Il existe d'autres méthodes, mais celles-ci sont généralement réservées aux transactions entre machines au travers de services web.
Les paramètres dans un URL
Commençons par expliquer ce qu'est un URL:
http://my-website.com/
On analyse un URL en commençant par la fin:
- .com est le TLD (Top-Level Domain)
- my-website est le nom de domaine
- http:// est le protocole de communication.
Nous n'allons pas faire un cours exhaustif sur ces éléments. La seule chose qu'il y a à savoir vient maintenant.
Cet URL peut être suivi par le script ou la page HTML, exemple:
http://my-website.com/index.php
On peut compléter cet URL avec un passage de paramètre:
http://my-website.com/index.php?temp=32.7
Ici on passe un paramètre temp dont la valeur est 32.7.
Le passage de paramètres par la méthode GET est marqué par le signe ?.
Passage de plusieurs paramètres
On peut transmettre plusieurs paramètres en les séparant par le signe &:
http://my-website.com/index.php?log=myLog&pwd=myPassWd&temp=32.7
Ici, nous transmettons trois paramètres:
- log avec la valeur myLog
- pwd avec la valeur myPassWd
- temp avec la valeur 32.7
Pour comprendre comment le serveur va recevoir ces données, on crée un script record.php qui va provisoirement contenir simplement ceci:
<?php var_dump($_GET);
et qui affichera ceci si on interroge ce script avec notre navigateur web préféré:
array(3) { ["log"]=> string(7) "myLogin" ["pwd"]=> string(10) "mypassword" ["temp"]=> string(4) "32.7" }
C'est quasiment tout ce dont nous avons besoin pour récupérer les données et les enregistrer sur le serveur. C'est ce que nous allons découvrir...
Gestion du passage de paramètres avec ESP32forth
Pour commencer, il est nécessaire de disposer de mots permettant de gérer des chaînes de caractères.
Vous trouverez ces mots ici:
strings management for ESP32forthExécutez le contenu de ce fichier par paquet de 4 lignes. Puis exécutez 3 load
pour retrouver ces définitions dans le
vocabulaire FORTH.
On commence par créer une chaîne de caractères:
256 string myUrl s" http://ws.arduino-forth.com/record.php?log=myLog&pwd=myPassWd&temp=" myUrl $!
On vient de définir une variable alphanumérique myUrl
. Cette variable est quasiment complète.
Il ne manque que la valeur du paramètre temp. Pour rajouter cette valeur, on exécutera append$
:
s" 32.5" myUrl append$
myUrl type
\ display: http://ws.arduino-forth.com/record.php?log=myLog&pwd=myPassWd&temp=32.5
C'est cet URL que nous allons utiliser dans cette définition:
: sendData ( str -- ) s" http://ws.arduino-forth.com/record.php?log=myLog&pwd=myPassWd&temp=" myUrl $! myUrl append$ \ cr myUrl type myUrl s>z HTTP.begin if HTTP.doGet dup 200 = if drop httpBuffer bufferSize HTTP.getPayload httpBuffer z>s type else cr ." CNX ERR: " . then then HTTP.end ; myWiFiConnect s" 32.65" sendData
Le mot sendData
récupère le contenu de la chaîne, ici 32.65, concatène
ce contenu à myUrl
, puis engage une transaction client Web vers le serveur
mentionné dans myUrl
.
Vous noterez que dans l'URL il y a un paramètre log. Ce paramètre peut être différent pour chaque carte ESP32 engageant une transaction vers le serveur web. Il est possible à 10, 20, ou même mille cartes ESP32 d'enregistrer leurs données vers un seul serveur web.
Listing complet correspondant à cet article disponible ici: Send data to web server with HTTP client
Legal: site web personnel sans commerce / personal site without seling