Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    NodeMCU ESP8266 HTTPS Secure POST GET Request

    NodeMCU & ESP HTTPS Request

    Alex @ AEQ-WEB

    Die meisten Mikrocontroller und Development Boards (Arduino, NodeMCU, ESP32, ESP8266 usw.) verwenden bei der Kommunikation mit einem Webserver das unverschlüsselte Protokoll HTTP. Sehr oft ist das vom Entwickler oder Anwender sogar gewollt, da hier meistens nur Steuerdaten übertragen werden und es nicht notwendig ist, diese zu verschlüsseln. Trotzdem kommt es oft zu immer mehr Problemen, wenn man HTTP anstatt HTTPS verwendet.

    Werbung:

    Warum HTTP immer mehr zum Problem wird

    Für die Datenübertragung zwischen Webserver und Mikrocontroller wird seit mehr als einem Jahrzehnt HTTP verwendet. Für das Protokoll gibt es sehr viele einfache Bibliotheken und die Ressourcen an heutigen Mikrocontrollern sind für diesen Verwendungszweck ausreichen vorhanden. HTTPS ist bei jeder guten Webseite heutzutage eine Grundvoraussetzung. Immer mehr Webserver bzw. Webspace Anbieter akzeptieren nur noch das HTTPS Protokoll. Teilweise blockieren auch Firewalls bereits HTTP und lassen nur noch HTTPS-Requests durch. Genau diese gravierende und fortschreitende Entwicklung zwingt uns, die Datenübertragungsart der Mikrocontroller anzupassen.

    HTTPS ohne Zertifikatabfrage

    Grundsätzlich bestätigt die Zertifizierungsstelle die Echtheit des Servers. Der Client kann durch die Abfrage der Zertifikate erkennen, ob der angefragte Server tatsächlich dieser ist, oder ob jemand dazwischen die zu übertragenen Daten abfängt. Unser Beispielcode ignoriert diese Überprüfung. Das bedeutet, die Datenübertragung erfolgt zwar über HTTPS, jedoch wird die Vertraulichkeit der Gegenstelle nicht überprüft. Für die meisten Anwendungen ist der Beispielcode trotzdem geeignet. Außerdem kommuniziert der Mikrocontroller auch bei einem Zertifikatsfehler oder einem selbst signierten SSL-Zertifikat zuverlässig.

    ESP8266/NodeMCU Beispielcode

    Unser Beispielcode funktioniert gleich wie der eines HTTP-Requests, allerdings über HTTPs. Dazu wird am Beginn des Quellcodes eine URL definiert, die der Mikrocontroller später aufrufen wird. Während des Aufrufes kann man dann Parameter über POST und GET an den Webserver übermitteln. Das können beispielsweise Wetterdaten einer Messstation sein. Die empfangene Antwort des Servers wandelt der Sourcecode in einen String um, der dann wenn nötig relativ einfach weiterverarbeitet werden kann.

    Werbung:

    NodeMCU HTTPS Source Code
    /*
    HTTPS GET/POST Request for NodeMCU/ESP8266
    Powered by: https://www.aeq-web.com
    */
    
    #include <ESP8266WiFi.h>
    #include <WiFiClientSecure.h>
    #include <ESP8266WebServer.h>
    #include <ESP8266HTTPClient.h>
    ///////////////////////////////BASIC SETINGS////////////////////////////
    const char *ssid = "YOURNETWORK"; //Wifi Network Name
    const char *password = "YOURPASSWORD"; //Wifi Network Key
    const char *host = "www.aeq-web.com"; //Domain to Server
    String path = "/test.php?get=test"; //Path of Server
    const int httpsPort = 443; //HTTPS PORT (default: 443)
    int refreshtime = 15; //Make new HTTPS request after x seconds
    ///////////////////////////////BASIC SETINGS////////////////////////////
    
    String datarx; //Received data as string
    long crontimer;
    
    void setup() {
      delay(1000);
      Serial.begin(115200);
      WiFi.mode(WIFI_OFF);
      delay(1000);
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);
      Serial.print("Connecting");
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.print("Connected: ");
      Serial.println(ssid);
    }
    
    void loop() {
      if(crontimer < millis()/1000){
        crontimer = (millis()/1000)+refreshtime;
        callhttps(); //
      }
    }
    
    void callhttps(){
      WiFiClientSecure httpsClient;
      httpsClient.setTimeout(15000);
      delay(1000);
      int retry = 0;
      while ((!httpsClient.connect(host, httpsPort)) && (retry < 15)) {
        delay(100);
        Serial.print(".");
        retry++;
      }
      if (retry == 15) {
        Serial.println("Connection failed");
      }
      else {
        Serial.println("Connected to Server");
      }
      httpsClient.print(String("GET ") + path + 
                        "HTTP/1.1\r\n" +
                        "Host: " + host +
                        "\r\n" + "Connection: close\r\n\r\n");
      while (httpsClient.connected()) {
        String line = httpsClient.readStringUntil('\n');
        if (line == "\r") {
          break;
        }
      }
      while (httpsClient.available()) {
        datarx += httpsClient.readStringUntil('\n');
      }
      Serial.println(datarx);
      datarx = "";
    }

    NodeMCU PHP Source Code
    <?php
    echo "GET: " . $_GET["get"]. " ";
    echo "POST: " . $_GET["post"]. " ";
    echo "Time: " . date("Y-m-d H:i:s");
    ?>


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    ESP Program Export HEX/BIN & Flash Tool Upload

    ESP32 Flash Tool Upload

    • Video
    • DE/EN

    Mit dem Flash Download Tool können fertig exportierte Programme (.BIN Datei) auf den ESP32/ESP8266 ohne Arduino IDE geladen werden

    Weiterlesen
    Die große LoRa Wettertstation Software

    Die große LoRa Wetterstation

    • Video

    In diesem Artikel bauen wir eine autarke LoRa Wetterstation, die Temperatur, Luftdruck, Feuchtigkeit, Sonnenintensität und Windgeschwindigkeit messen kann

    Weiterlesen

    Social Media

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden