Page
HTTPie je program, ktorý slúži na testovanie HTTP požiadaviek. Ovláda sa podobne ako známy program curl, primárne sa ale sústreďuje na uľahčenie komunikácie najmä pomocou dátového formátu JSON. HTTPie je napísaný v Pythone.
Pokiaľ to myslíte s Internetom vecí pomocou mikrokontrolérov vážne, bez tohto programu sa nezaobídete. Pomocou neho si môžete otestovať komunikáciu s konkrétnym serverom a podľa potreby si zobrazíte z komunikácie presne to, čo vás zaujíma. Program poskytuje pekný farebný výstup, ktorý uľahčuje orientáciu v zobrazovaných údajoch.
Prepokladom inštalácie je nainštalovaný Python na vašom počítači. Budeme predpokladať, že používate Windows a viete si spustiť príkazový riadok. Pokiaľ používate iný operačný systém, je vysoko pravdepodobné, že otázky inštalácie a používania Pythonu a príkazového riadku sú vám dôverne známe a z týchto príkladov všetko ľahko pochopíte aj bez extra upozorňovania na možné odlišnosti správania. Tých rozdielov ale je medzi všetkými systémami v prípade používania Pythonu minimum.
HTTPie nainštalujete tak, že do príkazového riadku napíšete príkaz
pip install --upgrade httpie
Stiahnu sa vám všetky potrebné balíky a môžete začať testovať HTTP požiadavky. V tomto článku nájdete len tie príklady, ktoré nejako súvisia s potrebami tejto stránky.Ciže primárne sa sústredím na vytváranie požiadaviek, ktoré môžete nejako využiť pri programovaní Arduina. Program toho vie ale omnoho viac a originálnu dokumentáciu nájdete na stránke projektu (GitHub, httpie.org).
Všetky príklady som napísal pre server httpbin.org, ktorý umožňuje otestovať ľubovoľnú požiadavku a naspäť vám vráti vo formáte JSON, čo ste urobili. Nemusíte sa báť, že by ste svojou chybou niečo vyviedli, pretože tento server len odpovedá a nič iné nevykonáva.
Pomocou tohto príkladu si vygenerujete presný text požiadavky. Podstatný je parameter -v, ktorý to zabezpečuje. Do príkazového riadku napíšete príkaz
http -v get https://httpbin.org/get a==6
Požiadavka
GET /get?a=6 HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Host: httpbin.org User-Agent: HTTPie/0.9.6
Odpoveď
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 250 Content-Type: application/json Date: Sun, 04 Dec 2016 19:53:44 GMT Server: nginx { "args": { "a": "6" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "HTTPie/0.9.6" }, "origin": "188.167.204.54", "url": "https://httpbin.org/get?a=6" }
V príkazovom riadku uvidíte celú svoju komunikáciu a podľa nej už ľahko vytvoríte takú istú požiadavku aj pomocou Arduina.
Príkaz GET odosiela požiadavky aj s parametrami priamo v URL adrese. HTTPie umožňuje ľahko vytvoriť viac parametrov a postará sa o to, aby vznikla správna URL adresa. Napríklad takto odošlete dva parametre prvy a druhy.
http -v get https://httpbin.org/get prvy==100 druhy=="arduino slovakia"
Požiadavka
GET /get?prvy=100&druhy=arduino+slovakia HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Host: httpbin.org User-Agent: HTTPie/0.9.6
Odpoveď
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 317 Content-Type: application/json Date: Sun, 04 Dec 2016 20:06:45 GMT Server: nginx { "args": { "druhy": "arduino slovakia", "prvy": "100" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "HTTPie/0.9.6" }, "origin": "188.167.204.54", "url": "https://httpbin.org/get?prvy=100&druhy=arduino+slovakia" }
Príkaz POST umožňuje v tele požiadavky zaslať údaje. Vo svete Internetu vecí sa využíva najmä JSON a HTTPie to implicitne urobí. Do príkazového riadku napíšte príkaz
http -v post https://httpbin.org/post prvy=100 druhy="arduino slovakia"
Požiadavka
POST /post HTTP/1.1 Accept: application/json, */* Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 44 Content-Type: application/json Host: httpbin.org User-Agent: HTTPie/0.9.6 { "druhy": "arduino slovakia", "prvy": "100" }
Odpoveď
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 487 Content-Type: application/json Date: Sun, 04 Dec 2016 20:11:44 GMT Server: nginx { "args": {}, "data": "{\"prvy\": \"100\", \"druhy\": \"arduino slovakia\"}", "files": {}, "form": {}, "headers": { "Accept": "application/json, */*", "Accept-Encoding": "gzip, deflate", "Content-Length": "44", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "HTTPie/0.9.6" }, "json": { "druhy": "arduino slovakia", "prvy": "100" }, "origin": "188.167.204.54", "url": "https://httpbin.org/post" }
Takto vyzerá požiadavka, ktorú ako keby ste napísali do nejakého formulára priamo na stránke v Internete.
http -v -f post https://httpbin.org/post prvy=100 druhy="arduino slovakia"
Požiadavka
POST /post HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 31 Content-Type: application/x-www-form-urlencoded; charset=utf-8 Host: httpbin.org User-Agent: HTTPie/0.9.6 prvy=100&druhy=arduino+slovakia
Odpoveď
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 451 Content-Type: application/json Date: Sun, 04 Dec 2016 20:16:32 GMT Server: nginx { "args": {}, "data": "", "files": {}, "form": { "druhy": "arduino slovakia", "prvy": "100" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "31", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "Host": "httpbin.org", "User-Agent": "HTTPie/0.9.6" }, "json": null, "origin": "188.167.204.54", "url": "https://httpbin.org/post" }
Ak ma napadnú ešte iné možnosti využitia, tak ich sem doplním. S týmito príkazmi by ste ale mali byť schopní vytvoriť väčšinu požiadaviek v Internete vecí.
04.12.2016