Autres articles / Other articles

Comprendre la transmission par GET vers un serveur WEB

publication: 4 août 2022 / mis à jour 5 août 2022

Read this page in english

 

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:

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:

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:

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 ESP32forth

Exé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