表題の通りで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経由で送信する時に必要になってくるので、理解を深めていきたい。