Esp32 : <form method=

Bonjour à tous,

J'ai programmé sur mon ESP32S2 de quoi mémoriser en EEPROM les identifiants de ma box et pour pouvoir changer ceux-ci si la connexion ne se fait pas j'ai un serveur AP pour entrer ceux-ci.
J'utilise un <form method= "get" mais j'ai un souci plus du html que du C.
Comment faire dans la page web pour que après l'envoi l'URL dans le navigateur soit automatiquement la racine ?

server.on("/", []() {
        IPAddress ip = WiFi.softAPIP();
        String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        content = "<html><head><meta name='viewport' content='width=device-width, initial-scale=1' >";
        content += "</head><body><h3>EEPROM_SSID.ino</h3></p>";
        content += "<form action=\"/scan\" method=\"POST\"><input type=\"submit\" value=\"scan\"></form>";
        content += ipStr + "<p>" + st;
        content += "</p><form method='get' action='setting'><label>SSID : </label><input name='ssid' length=32></p><label> PASS : </label><input name='pass' length=64>";
        content += "<input type='submit'></form></html>";
        server.send(200, "text/html", content);    });
 server.on("/scan", []() {
        IPAddress ip = WiFi.softAPIP();
        String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        content = "<!DOCTYPE HTML>\r\n<html>"+ip;
        server.send(200, "text/html", content);    });
        
  server.on("/setting", []() {
        ssid = server.arg("ssid");
        pass = server.arg("pass");
        if (ssid.length() > 0 && pass.length() > 0) {
           eepromClear();
           eepromWrite();
           content = "{\"Success\":\"saved to eeprom... reset to boot into new wifi\"}";
           statusCode = 200;
           ESP.restart();  } 

Après redémarrage de l'ESP dans le navigateur y a l'envoi de la dernière c'est à dire le
adresseIP/setting?ssid=XXX&pass=YYYY
ce serait sympa si avant le reset il envoie au navigateur
adresseIP/

Merci d'avance.

Personne pour m'aider !
Donc

  • soit c'est trop dur (peu probable)
  • soit c'est trop simple et je dois trouver sans qu'on m'aide...

Ou alors c'est que je me suis mal exprimé... Je dois avouer que les get et les post c'est pas ma tasse de thé.
Peut-être qu'il faut envoyer l'ordre mais sans qu'il soit afficher dans l'url ?

Mon code a un peu évolué

void defHandle(){  
  server.on("/", []() {
        IPAddress ip =  WiFi.localIP();
        String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        ip = WiFi.softAPIP();
        ipStr += "<p> " + String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        content =  HtmlHtml + HtmlTitle ;
        //content += "<form action=\"/scan\" method=\"POST\"><input type=\"submit\" value=\"scan\"></form>";
        content += ipStr + "<p>";
        String test = ssid.substring(0,ssid.length()-1);
        content += "</p><form method='get' action='setting'><label>SSID : </label><input name='ssid' length=32  value='" + test + "'>";
        test = pass.substring(0,pass.length()-1);
        content += "</p><label> PASS : </label><input name='pass' length=64 value='" + test + "'>";
        content += "<input type='submit'></form></html>";
        server.send(200, "text/html", content);    });
      
  server.on("/scan", []() {
        IPAddress ip = WiFi.softAPIP();
        Serial.println(ip);
        String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        ip = WiFi.localIP();
        ipStr += "<p> et " + String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        content = HtmlHtml + HtmlTitle + ipStr + "</html>";
        server.send(200, "text/html", content);    });
        
  server.on("/setting", []() {
        ssid = server.arg("ssid");
        pass = server.arg("pass");
        if (ssid.length() > 0 && pass.length() > 0) {
           eepromClear();
           eepromWrite();
           content = HtmlHtml + HtmlTitle + " Parfait : identifiants enregistr&eacute;s </html>";
           statusCode = 200;            } 
        server.sendHeader("Access-Control-Allow-Origin", "/");
        server.send(statusCode,"text/html", content );
        ESP.restart(); } ); 
  server.begin();
  Serial.println("Server started");  }
  

Je ne sais pas ce que signifie

server.sendHeader("Access-Control-Allow-Origin", "/");

Ou bien une valeur différente pour statusCode ?

Je dirais à vue de nez qu'un petit délai serait nécessaire entre l'envoi de la réponse et l'appel à restart(), sinon l'ESP va redémarrer avant d'avoir pu envoyer physiquement les données.

Access-Control-Allow-Origin : autorise le partage des ressources entre origines multiples (CORS). Si ton navigateur s'adresse uniquement à l'ESP, quel intérêt ?
Si le code de la page contenait du code JS pour aller chercher des ressources sur un autre server, ce serait utile.

Personnellement j'utilise WiFi Manager pour gérer cela.
➜ GitHub - tzapu/WiFiManager: ESP8266 WiFi Connection manager with web captive portal

Plutôt que de bidouiller par soi-même un truc qui marchouillera plus ou moins, WifiManager peut apporter une solution fiable, clairement.