表題の通りでNodeMCUでHTTP GETリクエストを試してみた。
GETリクエストまで見れたら、httpプロトコルに関して一通り見れた事になるのかなと。
早速、5. ネットワーク - TCPソケット — MicroPython 1.17 ドキュメント#HTTP GETリクエストを参考にして下記のコードを作成してみた。
main.py
def http_get(url): import socket _, _, host, path = url.split('/', 3) addr = socket.getaddrinfo(host, 80)[0][-1] s = socket.socket() s.connect(addr) s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8')) while True: data = s.recv(100) if data: print(str(data, 'utf8'), end='') else: break s.close() http_get("http://www.example.com/")
実行してみると、下記の結果が返ってきた。
HTTP/1.0 200 OK Age: 553971 Cache-Control: max-age=604800 Content-Type: text/html; charset=UTF-8 Date: Wed, 19 Jan 2022 21:39:03 GMT Etag: "3147526947+ident" Expires: Wed, 26 Jan 2022 21:39:03 GMT Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT Server: ECS (sab/573F) Vary: Accept-Encoding X-Cache: HIT Content-Length: 1256 Connection: close ##ここから始まるHTMLの本文は省略##
200 OKが返ってきたので、HTTP GETリクエストは成功だ。
今回のコードの
http_get("http://www.example.com/")
を
http_get("https://saitodev.co/")
のようにhttpsから始まるURLに変更すると失敗する。
こちらから送信するGETリクエストhttpsから始まるURLに対応するように書き換える必要があるのだろうな。
Raspberry PiにPH4502Cを繋いでみたで得られたようなデータをWiFi経由で送信する時に必要になってくるので、理解を深めていきたい。