Tallenna tiedot IoT-verkkopalvelimelle HTTP POST -pyyntöjen avulla
Kuten sarjan ensimmäisessä artikkelissa selitettiin tallentaa esineiden Internet-laitteilla saatuja tietoja, vaikka tallennetut tiedot päätyvät palvelimelle MySQL o MariaDB ja kieltä käytetään PHP niiden manipuloimiseksi syötössä ja lähdössä tiedonkulku elektronisten laitteiden ja tietokannan välillä tapahtuu käyttämällä a Web-palvelin joiden kanssa olet yhteydessä HTTP-protokolla.
Määritelmän alussa HTTP-protokolla Käyttökohteita oli verrattavissa kuvattuun, mutta tosiasia on, että loppujen lopuksi sitä ei ole hyödynnetty täysin eri syistä, osittain turvallisuudesta ja osittain siitä syystä, että tarkemman tai tehokkaamman protokollan määrittelyssä ei koskaan edistytty, joten nykyään varsinkin julkisilla palvelimilla yleisin asia on käyttää yhteyttä HTTP mikä tekee a POST-pyyntö palvelimelle tietojen tallentamiseksi tai a SAA palauttaaksesi sen, yleensä näyttääksesi verkkosivun, joka esittää sen ja jolla voit jopa olla vuorovaikutuksessa.
Palvelimelle pyynnössä lähetetty yksinkertaisin teksti HTTP POST sisältää rivin pyynnön tyypillä (POST) polku verkkosivulle, joka tallentaa tiedot ja version HTTP-protokolla; toinen rivi isäntänimellä (joka sallii virtuaalipalvelimet samalla palvelimella ja/tai samassa IP-osoitteessa) ja lopuksi toinen, joka sisältää tallennetut tiedot erotettuna toisistaan &-merkillä ja edellisistä riveistä yhdellä tyhjä.
1 2 3 4 | POST /iot/grabar_temperatura HTTP/1.1 Host: polaridad.es ne=muelle+de+carga&tp=10.26&cr=2.18 |
Yllä olevassa esimerkissä palvelin nimeltä polaridad.es sisältää sivun tiedostossa /iot/grabar_temperatura tietojen hallintaa varten versiolla 1.1. HTTP-protokolla
Voidaan nähdä, että käytetään kahta &-merkkiä, mikä osoittaa, että kolme kenttää on tallennettu. Kenttien nimet ovat yhtäläisyysmerkin vasemmalla puolella ja niiden määrittelyssä on käytetty vain kahta kirjainta. Pyynnön kenttien (tai halutessasi muuttujien) niminä HTTP Ne eivät liity tietokannassa oleviin, kuvailevien tekstien käyttö ei ole erityisen tärkeää ja lyhyitä nimiä valitaan yleensä (parilliset kentät) tekstin tallentamiseksi yhteydenpitoon palvelimen kanssa ja tiedon lähetysprosessin nopeuttamiseksi.
Tieto, jonka IoT-laite normaalisti lähettää palvelimelle, on numeerista tyyppiä, pääasiassa kokonaislukuja ja yksinkertaisia desimaalilukuja. Kun arvot lähetetään tekstimuodossa, kuten esimerkin muuttujan "ne" tapauksessa, voi syntyä epäsuotuisia olosuhteita, jotka voidaan ratkaista tapauksesta riippuen enemmän tai vähemmän onnistuneesti ja helposti. Tässä tapauksessa plusmerkkejä (+) käytetään sanojen erottamiseen korvaamalla välilyönnit, jotka muutoin muuttaisivat sanaa POST-pyyntö. Yleinen tapa lähettää dataa, joka ratkaisee useimmat tapaukset, on ilmoittaa merkkien heksadesimaalikoodi, jota edeltää prosenttimerkki (%) Loogisesti ei ole suositeltavaa käyttää tätä resurssia paitsi silloin, kun koodattu on ongelmallista, koska sen pituus Lähetetyn määrän määrä kasvaa, mikä yleensä vaatii enemmän resursseja, vaikka se onkin kooltaan todella pieni.
Vaikka on mahdollista käyttää a Web-palvelin Esineiden Internetissä vain edellisen esimerkin tiedoilla monet palvelimet, erityisesti julkiset, lisäävät POST-kyselyyn muita tietoja (valitettavasti ei aina rajoitu protokollaan) Alla oleva esimerkki vastaa kaivon pyytämää lähetyspyyntöä - tunnettu palvelin. julkinen esineiden internetille AsiPuhu.
1 2 3 4 5 6 7 8 | POST /update HTTP/1.1 Host: api.thingspeak.com Connection: close X–THINGSPEAKAPIKEY: 1234567890 Content–Type: application/x–www–form–urlencoded Content–Length: 23 1=10.25&2=–5.32&3=25.15 |
Joidenkin henkilötietojen lisäksi mm X-THINGSPEAKAPIKEY
(ja joka vastaa kunkin asiakkaan tunnistetta) edellisessä esimerkissä voit nähdä, että on muita otsikoita, jotka lisäävät pyyntöön lisätietoja.
Otsikon käyttäminen a POST-pyyntö Se koostuu yksinkertaisesti sen nimen kirjoittamisesta, kaksoispistemerkistä (:), tyhjästä välilyönnistä ja arvosta, jonka haluat antaa sille.
POST-pyyntöjen testaamiseksi web-palvelimelle ennen muiden komponenttien määrittämistä voidaan muodostaa yhteys palvelimeen ja lähettää tiedot manuaalisesti. Esimerkiksi Linux-tietokoneessa se riittäisi käytettäväksi telnet polaridad.es 80
jossa polaridad.es on palvelimen nimi ja 80 on portin numero, johon palvelu vastaa. HTTP.
Monialustaista työkalua voidaan käyttää Linuxissa, Windowsissa tai käyttöjärjestelmässä PuTTY, josta artikkelissa puhuttiin ohjata UART-sarjalaitteita tietokoneelta, muodostaaksesi yhteyden käyttämättä konsolia.
Seuraavassa HTTP-otsikoiden luettelo Useimmat niistä voivat olla hyödyllisiä a POST-pyyntö on a Web-palvelin esineiden Internetiin.
-
Accept
Sitä käytetään ilmaisemaan tyyppi MIME joita pyyntö odottaa palvelimen käyttävän vastauksessa. Se ilmaistaan muodossatipo/subtipo
joka voidaan yleistää käyttämällä tähtimerkkiä (*) jokerimerkkinä, esimerkiksi nimellä*/*
viitata mihin tahansa taitipo/*
viittaamaan kaikkiin alatyyppeihintipo
Yleisimmin käytettyjä ovat:
-
text/plain
Vaikka se on yksinkertaisin, se on myös eniten käytetty. Se odottaa palvelimen palauttavan yksinkertaisen (pelkkä) tekstivastauksen, joka riittää ilmoittamaan, että tapahtuma on sujunut oikein, ja lisäävän korkeintaan lisätietoja, kuten tallennettujen tietojen tilausnumeron, vertailun tuloksen, tapahtuman päivämäärän. palvelin… -
application/xml
otext/xml
Odota, että palvelin vastaa pyyntöön muodossa XML. Valinnan merkitystext
sijaanapplication
mahdollistaa helpomman "inhimillisen" lukemisen (verrattuna "automaattiseen"). Tämä kaksinaisuus tulee esiin muissa MIME-tyypit mutta standardin tulevaisuuden trendi on suosiaapplication
edessätext
Muoto XML mahdollistaa paljon dataa sisältävän vastauksen strukturoinnin erittäin vankasti, haittapuolena on, että se lisää verkkodataan paljon taikuutta, mikä saa vastauksen viemään enemmän kuin on tarpeen, mikä vaatii enemmän kaistanleveyttä ja todennäköisesti enemmän IoT-laitteen muistia sen käsittelemiseksi. -
text/html
Käytetään, kun palvelimen vastaus on HTML koodattu pelkkäksi tekstiksi (plain text), joka yleensä muotoilee vastauksen. Koska kyse on tietojen tallentamisesta ja vastaus tavoittaisi pienen laitteen ilman paljon resursseja, tämän tyypin käyttö ei ole yleistä. -
application/xhtml+xml
Pohjimmiltaan se on versio XHTML (HTML kuten XML voimassa) edellisen osan tiedoista. -
application/json
Sitä käytetään eniten, kun palvelinvastaus sisältää useita tietoja, mukaan lukien enemmän tai vähemmän monimutkaisen rakenteen. Muoto JSON jaa muodossa XML vankka rakenne ja lisää sen etuna, että se on tiiviimpi rakenteen lisäämässä tekstissä.
-
-
Accept-Charset
Määrittää tekstin koodauksen, jota pyydetään käytettäväksi vastauksessa. Jos haluat koodata latinalaisia merkkejä, UTF-8, täydellisin, ISO-8859 15, joka sisältää euromerkin (€) ja ISO-8859 1, joka on alkeellisinta. -
Accept-Encoding
Ilmaisee muodon, jonka mukaan palvelimen vastaus voidaan koodata. Pohjimmiltaan se osoittaa puristustyypin. Jotkut yleisimmistä ovatgzip
deflate
(joka voidaan määritellä tarkemmindeflate-raw
odeflate-http
) Ei ole yleistä käyttää sitä pienissä esineiden Internetiin yhdistetyissä laitteissa, koska se vaatii tietyn resurssien kulutuksen (muistin ja käsittelyajan), joita tämän tyyppisissä laitteissa on yleensä vähän. Ei ole tarpeen ilmoittaa, että pakkausta ei käytetäAccept-Encoding: identity
koska tällainen seikka otetaan oletuksena huomioon. -
Accept-Language
Ilmaisee kielen, jota voidaan käyttää vastauksessa. Esimerkiksi Espanjan espanja määritettäisiin muodossaes-ES
tai Amerikan yhdysvaltojen englantia asen-US
-
Connection
Sitä käytetään määrittämään, mitä tulee tehdä yhteydelle, joka on muodostettu asiakkaan (IoT-laitteen) ja Web-palvelin kun tiedot on vastaanotettu. Yleensä käytetään arvon kanssaclose
muodossaConnection: close
ilmaisemaan, että yhteys tulee sulkea asiakkaalle vastaamisen jälkeen. -
Content-Length
Sen avulla voit ilmoittaa tiedot sisältävän pyynnön osan käyttämien tavujen määrän, joka on otsikoiden jälkeen ja erotettu tyhjällä rivillä. Se on erittäin hyödyllinen, koska sen avulla varmistetaan lähetettyjen tietojen eheys. Jos se ei mittaa ilmoitettua, sitä ei tallenneta, koska katsotaan, että se ei ole saapunut oikein. Useimmat julkiset IoT-palvelimet vaativat sitä yleensä. -
Content-Type
Se toimii osoittamaan MIME-tyyppi jolla palvelimelle lähetettävät tiedot koodataan. Tyyppejä käytetään yleensätext/html
kun palvelimelle lähetetyt tiedot ilmaistaan yksinkertaisena arvoluettelona (jotain kutena=3.6&b=4.8
) Jaapplication/jsonrequest
(joka olisi vastaava tyyppiapplication/json
josta puhutaanAccept
), kun tarvitaan monimutkaisempi rakenne, mutta mikä tahansa seuraavista voidaan lähettää luettelo MIME-tyypeistä. -
Cookie
Sitä käytetään lisäämään istuntotunniste, jolla ylläpidetään siirtojen ketjua (kysely, vastaus, kysely...), joka on monimutkaisempi kuin yksittäinen pyyntö, jolla lähetetään tiettyjä liittyviä tietoja, mutta jotka on saatu eri aikoina. -
Referer
URL, josta POST-pyyntö on peräisin, esimerkiksi verkkosivu, jolta se lähetettiin. Jos sitä käytetään IoT:hen, se ei lisää oleellista tietoa, koska tiedot lähetetään suoraan, ilman edellistä sivua, joten niitä ei käytetä usein. -
User-Agent
Ilmoittaa pyynnön tehneen laitteen. Normaalissa verkkoliikenteessä esineiden internetissä käytettävä selain antaa palvelimelle mahdollisuuden ilmoittaa pyynnön tekevän elektronisen laitteen tyypin. Palvelimelle itsensä tunnistaminen mahdollistaa vastauksen muotoilemisen jokaisessa tapauksessa eri tavalla, esimerkiksi palauttamalla monimutkaisen verkkosivun selaimeen ja muutaman varoitusdatan pienelle IoT-laitteelle.
On mahdollista määrittää pilkuilla eroteltu luettelo vaihtoehdoista yhden arvon sijasta otsikoissa osoittamaan, että useita eri arvoja tuetaan samanaikaisesti. Näillä arvoilla voi olla prioriteettijärjestys, joka ilmaistaan kunkin laatukertoimen q mukaan. Laatukertoimet erotetaan puolipisteellä (;) ja tähtiä (*) voidaan myös käyttää viittaamaan mihin tahansa tyyppiin tai alatyyppiin.
Accept: text/plain,text/xml,application/json;q=0.8,text/*;q=0.9,application/json
Edellisessä esimerkissä muodon prioriteetti JSON suurin (0.9) on pelkkää tekstiä ja muotoiltua tekstiä. XML, jotka täyttävät eritelmän text/*
, on pienempi (0.8) ja yhtä suuri niiden välillä. Jos mahdollista, palvelimen tulee reagoida koodaamalla vastaus muodossa JSON.
Seuraavassa täydellisemmän POST-pyynnön esimerkissä polaridad.es-nimisen palvelimen /iot/grabar_temperatura-sivua käytetään HTTP-protokollan versiolla 1.1. Asiakas, jonka nimi on Sensoreitor-2000, lähettää koodatut tiedot sisään JSON, odota vastausta pelkkänä tekstinä muodossa UTF-8 käyttämällä espanjaa Espanjasta ilman pakkausta, jota ei muuten tarvitse osoittaa. Palvelimelle lähetettävä data vie 65 tavua. Vastausta lähetettäessä yhteys asiakkaan ja palvelimen välillä suljetaan.
1 2 3 4 5 6 7 8 9 10 11 12 | POST /iot/grabar_temperatura HTTP/1.1 Host: polaridad.es Accept: text/plain Accept–Charset: utf–8 Accept–Encoding: identity Accept–Language: es–ES Connection: close Content–Length: 65 Content–Type: application/jsonrequest User–Agent: Sensoreitor–2000 {“estancia”:“pasillo superior”,“temperatura”:22.5,“consumo”:2.25} |
Seuraava artikkeli selittää miten MySQL-tietokanta määritetään tallentamaan IoT-objektien lähettämiä tietoja
Post Comment