Speichern Sie Daten mithilfe von HTTP-POST-Anfragen auf einem IoT-Webserver

Speichern Sie Daten mithilfe von HTTP-POST-Anfragen auf einem IoT-Webserver

Speichern Sie Daten mithilfe von HTTP-POST-Anfragen auf einem IoT-Webserver

IoT-WebserverHTTP POST IoT-WebserverMySQL-Datenbank. IoT-WebserverIoT-Webserver in PHP-Sprache

Wie im ersten Artikel der Serie erklärt Speichern Sie Daten, die von Geräten für das Internet der Dinge erfasst wurden, obwohl die gespeicherten Daten auf einem Server landen MySQL o MariaDB und Sprache wird verwendet PHP Um sie bei der Ein- und Ausgabe zu manipulieren, erfolgt der Informationsfluss zwischen dem elektronischen Gerät und der Datenbank über a Webserver mit wem Sie entsprechend kommunizieren Protokoll HTTP.

Zu Beginn der Definition von Protokoll HTTP Es gab vergleichbare Verwendungszwecke wie die beschriebene, aber Tatsache ist, dass sie letztendlich aus verschiedenen Gründen nicht vollständig ausgenutzt wurde, teils aus Sicherheitsgründen, teils weil nie Fortschritte bei der Definition eines spezifischeren oder effizienteren Protokolls erzielt wurden, insbesondere heutzutage Auf öffentlichen Servern wird am häufigsten eine Verbindung verwendet HTTP Was macht ein POST-Anfrage an den Server, um die Informationen zu speichern oder a BESTELLE um es wiederherzustellen, normalerweise um eine Webseite anzuzeigen, die es präsentiert und sogar auf der Sie interagieren können.

Der grundlegendste Text, der in einer Anfrage an den Server gesendet wird HTTP jetzt lesen enthält eine Zeile mit der Art der Anfrage (jetzt lesen) den Pfad zur Webseite, auf der die Informationen gespeichert werden, und die Version davon Protokoll HTTP; eine weitere Zeile mit dem Hostnamen (der virtuelle Server auf demselben Server und/oder derselben IP-Adresse zulässt) und schließlich eine weitere Zeile mit den aufgezeichneten Daten, voneinander durch das &-Zeichen und durch eins von den vorherigen Zeilen getrennt leer.

Im obigen Beispiel würde ein Server namens polaridad.es eine Seite in /iot/grabar_temperatura enthalten, um die Informationen mit Version 1.1 zu verwalten Protokoll HTTP

Es ist ersichtlich, dass zwei &-Zeichen verwendet werden, was zeigt, dass drei Felder gespeichert sind. Der Name der Felder steht links vom Gleichheitszeichen und es wurden nur zwei Buchstaben verwendet, um sie zu definieren. Als Name der Felder (oder Variablen, falls Sie dies bevorzugen) der Anfrage HTTP Sie haben keinen Bezug zu denen in der Datenbank, es ist nicht besonders wichtig, beschreibende Texte zu verwenden und in der Regel werden kurze Namen gewählt (geradzahlige Felder), um Text bei der Kommunikation mit dem Server zu sparen und den Datenversandprozess zu beschleunigen.

Die Daten, die ein IoT-Gerät normalerweise an den Server sendet, sind numerischer Art, hauptsächlich Ganzzahlen und einfache Dezimalzahlen. Bei der Übermittlung von Werten im Textformat, wie es im Beispiel bei der Variable „ne“ der Fall ist, können ungünstige Umstände entstehen, die je nach Fall mehr oder weniger erfolgreich und einfach gelöst werden können. Bei dieser Gelegenheit werden Pluszeichen (+) zum Trennen von Wörtern verwendet und ersetzen Leerzeichen, die andernfalls das Wort verändern würden POST-Anfrage. Eine generische Methode zum Senden von Daten, die die meisten Fälle löst, besteht darin, den Hexadezimalcode der Zeichen anzugeben, dem das Prozentzeichen (%) vorangestellt ist. Logischerweise ist es nicht ratsam, diese Ressource zu verwenden, es sei denn, die Codierung ist problematisch, da die Länge von was gesendet wird, erhöht sich, was im Allgemeinen mehr Ressourcen erfordert, obwohl es sicherlich sehr klein ist.

Obwohl es möglich ist, a zu betreiben Webserver Für das Internet der Dinge nur mit den Informationen aus dem vorherigen Beispiel, viele Server, insbesondere öffentliche, fügen der POST-Abfrage weitere Daten hinzu (leider nicht immer auf das Protokoll beschränkt). Das folgende Beispiel entspricht der vom Brunnen angeforderten Post-Anfrage -bekannter Server. Öffentlich für das Internet der Dinge DingSpeak.

Neben einigen personenbezogenen Daten, wie z X-THINGSPEAKAPIKEY (und der der Kennung jedes Clients entspricht) Im vorherigen Beispiel können Sie sehen, dass es andere Header gibt, die der Anfrage weitere Informationen hinzufügen.

So verwenden Sie einen Header in einem POST-Anfrage Es besteht lediglich aus dem Schreiben seines Namens, eines Doppelpunkts (:), eines Leerzeichens und des Werts, den Sie ihm zuweisen möchten.

Um POST-Anfragen an den Webserver zu testen, bevor die Konfiguration der anderen Komponenten abgeschlossen ist, kann eine Verbindung zum Server hergestellt und die Daten manuell gesendet werden. Auf einem Linux-Computer würde es beispielsweise ausreichen, es zu verwenden telnet polaridad.es 80 Dabei ist polaridad.es der Name des Servers und 80 die Portnummer, auf die der Dienst antwortet. HTTP.

Stellen Sie über Telnet eine Verbindung zum Webserver polaridad.es her, um IoT-Daten zu speichern

Das plattformübergreifende Tool kann unter Linux, Windows oder OS verwendet werden PuTTY, worüber in dem Artikel gesprochen wurde Steuern Sie serielle UART-Geräte vom Computer aus, um die Verbindung ohne Verwendung der Konsole herzustellen.

Stellen Sie mithilfe von PuTTY eine Verbindung zum Webserver polaridad.es her, um IoT-Daten zu speichern

Im Folgenden Liste der HTTP-Header Es gibt die meisten davon, die für einen nützlich sein können POST-Anfrage ein Webserver für das Internet der Dinge.

  • Accept Es dient zur Angabe des Typs MIME die die Anfrage vom Server als Antwort erwartet. Es wird ausgedrückt als tipo/subtipo was mit dem Sternchen (*) als Platzhalterzeichen verallgemeinert werden kann, zum Beispiel als */* sich auf irgendein beziehen oder tipo/* um sich auf alle Untertypen von zu beziehen tipo

    Die am häufigsten verwendeten sind:

    • text/plain Obwohl es das einfachste ist, wird es auch am häufigsten verwendet. Er erwartet, dass der Server eine einfache (Klartext-)Antwort zurückgibt, die ausreicht, um mitzuteilen, dass die Transaktion korrekt war, und höchstens zusätzliche Informationen wie die Bestellnummer der aufgezeichneten Daten, das Ergebnis eines Vergleichs und das Datum der Transaktion hinzuzufügen Server…

    • application/xml o text/xml Warten Sie, bis der Server im Format auf die Anfrage antwortet XML. Die Bedeutung des Wählens text statt application ermöglicht ein einfacheres „menschliches“ (im Vergleich zu „automatischem“) Lesen. Diese Dualität wird sich in anderen zeigen MIME-Typen aber der zukünftige Trend des Standards ist, ihn zu bevorzugen application gegen text Das Format XML Ermöglicht die sehr solide Strukturierung einer Antwort, die viele Daten enthält. Der Nachteil besteht jedoch darin, dass den Nettodaten viel Künstlichkeit hinzugefügt wird, wodurch die Antwort mehr als nötig in Anspruch nimmt und daher mehr Bandbreite und wahrscheinlich mehr erfordert Speicher im IoT-Gerät, um es zu verarbeiten.

    • text/html Wird verwendet, wenn die Serverantwort lautet HTML als Klartext (Klartext) kodiert, der normalerweise eine Antwort formatiert. Da es um die Speicherung von Daten geht und die Antwort ein kleines Gerät ohne viele Ressourcen erreichen würde, ist die Verwendung dieses Typs nicht üblich.

    • application/xhtml+xml Im Grunde ist es die Version XHTML (HTML als XML gültig) der Informationen im vorherigen Abschnitt.

    • application/json Es wird am häufigsten verwendet, wenn die Serverantwort mehrere Daten mit einer mehr oder weniger komplexen Struktur enthält. Das Format JSON Mit Format teilen XML eine solide Struktur und bietet den Vorteil, dass der durch die Struktur hinzugefügte Text prägnanter ist.

  • Accept-Charset Bestimmt die Textkodierung, die in der Antwort verwendet werden soll. Um lateinische Zeichen zu kodieren, wird die UTF-8, das vollständigste, ISO 8859-15, das das Eurozeichen (€) und das enthält ISO 8859-1, was am grundlegendsten ist.

  • Accept-Encoding Gibt das Format an, nach dem die Serverantwort codiert werden kann. Grundsätzlich dient es zur Angabe einer Art der Komprimierung. Einige der häufigsten sind gzip deflate (was mit genauer spezifiziert werden kann). deflate-raw o deflate-http) Es ist nicht üblich, es in kleinen Geräten zu verwenden, die mit dem Internet der Dinge verbunden sind, da es einen gewissen Ressourcenverbrauch (Speicher und Verarbeitungszeit) erfordert, der bei solchen Geräten normalerweise knapp ist. Es ist nicht erforderlich anzugeben, dass keine Komprimierung verwendet wird Accept-Encoding: identity da ein solcher Umstand standardmäßig berücksichtigt wird.

  • Accept-Language Drückt die Sprache aus, die in der Antwort verwendet werden kann. Beispielsweise würde das Spanisch von Spanien als angegeben werden es-ES oder das Englisch der Vereinigten Staaten von Amerika als en-US

  • Connection Es wird verwendet, um anzugeben, was mit der Verbindung geschehen soll, die zwischen dem Client (dem IoT-Gerät) und dem hergestellt wurde Webserver sobald die Daten empfangen wurden. Wird normalerweise mit dem Wert verwendet close im Format Connection: close um anzugeben, dass die Verbindung geschlossen werden soll, nachdem dem Client geantwortet wurde.

  • Content-Length Damit können Sie die Anzahl der Bytes angeben, die von dem Teil der Anforderung belegt werden, der die Daten enthält. Dies ist der Teil nach den Headern, getrennt durch eine Leerzeile. Dies ist sehr nützlich, da es dazu dient, die Integrität der gesendeten Informationen zu überprüfen. Wenn nicht gemessen wird, was deklariert wurde, wird es nicht gespeichert, da davon ausgegangen wird, dass es nicht korrekt angekommen ist. Es wird normalerweise von den meisten öffentlichen IoT-Servern benötigt.

  • Content-Type Es dient zur Angabe der Mime Typ mit dem die an den Server gesendeten Informationen verschlüsselt werden. Die Typen werden üblicherweise verwendet text/html wenn die an den Server gesendeten Daten als einfache Werteliste ausgedrückt werden (so etwas wie a=3.6&b=4.8) Und application/jsonrequest (was dem Typ entsprechen würde application/json worüber gesprochen wird Accept), wenn eine komplexere Struktur erforderlich ist, aber eine der folgenden Optionen gesendet werden kann Liste der MIME-Typen.

  • Cookie Es wird verwendet, um eine Sitzungskennung hinzuzufügen, mit der eine Übertragungskette (Abfrage, Antwort, Abfrage ...) verwaltet werden kann, die komplexer ist als eine einzelne Anfrage, mit der bestimmte zusammengehörige Daten gesendet werden sollen, die jedoch zu unterschiedlichen Zeiten eingehen.

  • Inhaltsverzeichnis
    • Referer URL, von der die POST-Anfrage stammt, beispielsweise die Webseite, von der sie gesendet wurde. Bei der Verwendung für IoT werden keine relevanten Informationen hinzugefügt, da die Informationen direkt und ohne vorherige Seite gesendet werden und daher nicht häufig verwendet werden.

    • User-Agent Meldet das Gerät, das die Anfrage stellt. Im normalen Webverkehr ermöglicht der im Internet der Dinge verwendete Browser dem Server, die Art des elektronischen Geräts anzuzeigen, das die Anfrage stellt. Durch die Identifikation gegenüber dem Server kann die Antwort jeweils anders formatiert werden, zum Beispiel die Rückgabe einer komplexen Webseite an einen Browser und ein paar Warndaten an ein kleines IoT-Gerät.

    Es ist möglich, anstelle eines einzelnen Werts in Headern eine durch Kommas getrennte Liste von Optionen anzugeben, um anzuzeigen, dass mehrere verschiedene Werte gleichzeitig unterstützt werden. Diese Werte können eine Prioritätsreihenfolge haben, die durch einen Qualitätskoeffizienten q für jeden Wert ausgedrückt wird. Qualitätskoeffizienten werden durch ein Semikolon (;) getrennt und Sternchen (*) können auch verwendet werden, um auf jeden Typ oder Subtyp zu verweisen.

    Accept: text/plain,text/xml,application/json;q=0.8,text/*;q=0.9,application/json

    Im vorherigen Beispiel die Priorität des Formats JSON Der größte Wert (0.9) liegt bei reinem Text und bei formatiertem Text. XML, die der Spezifikation entsprechen text/*, ist kleiner (0.8) und zwischen ihnen gleich. Wenn möglich, sollte der Server reagieren, indem er die Antwort als kodiert JSON.

    Im folgenden Beispiel einer umfassenderen POST-Anfrage wird auf die Seite /iot/grabar_temperatura des Servers namens polaridad.es mit Version 1.1 des HTTP-Protokolls zugegriffen. Der Client namens Sensoreitor-2000 sendet die verschlüsselten Daten ein JSON, erwarten Sie die Antwort im Nur-Text-Format UTF-8 Verwendung von Spanisch aus Spanien ohne Komprimierung, was übrigens nicht angegeben werden muss. Die an den Server gesendeten Daten belegen 65 Byte. Beim Senden der Antwort wird die Verbindung zwischen Client und Server geschlossen.

    Der folgende Artikel erklärt So konfigurieren Sie die MySQL-Datenbank zum Speichern von Informationen, die von IoT-Objekten gesendet werden

    Geben Sie Anmerkung

    Sie können vermisst haben