【Arduino/ESP8266】HttpClientを使ってHTTPSをGETする

Arduino

HttpClientでHTTPSのwebデータをGETする

こんにちは、くろべこです。

前回の記事では<ESP8266HTTPClient.h>を使用してJSONフォーマットのボディデータをGETしました。この時の通信プロトコルはHTTPサーバーだったのでクライアントからGETリクエストする際に特別なやり取りをする必要がありませんでした。

【Arduino/ESP8266】HttpClientを使ってHTTPをGETする
本記事ではHttpClientを使用して特定のHTTPウェブページに対してGETリクエストを送りBODYデータを読み取る手法についてい解説を行いたいと思います。ベースはサンプルプログラムの【BasicHttpClient】です。マイコンはおなじみのESP8266を使用してArduinoIDE環境下で進めたいと思います。

今回は【HTTPS】のサーバーからボディデータをGETするためにはどのようにすればいいか取り上げていこうと思います。

そもそも【HTTP】【HTTPS】とはウェブサービスを閲覧するときの通信取り決めです。HTTPはハガキのように配達員などの第三者からのぞき見が可能ですが、HTTPSは封書の様なものなので第三者からは閲覧できないような通信取り決めとなっています。

参考リンク:HTTPとは、HTTPSとは?

では、Arduino環境下でHttpClientを使用してHTTPSのウェブサービスにアクセスするために何が必要かというと【FingerPrint:フィンガープリント】が必要になってきます。

FingerPrintとはSSHクライアントからSSHサーバーへ最初に接続すると接続先のサーバーが正しいものであるかどうか尋ねてきます。このときに表示される意味不明な英数字の羅列が、SSHサーバーの公開鍵の指紋(finger print)と呼ばれるものです。指紋というくらいなので、SSHサーバーを識別するのに利用されます。
本記事でアクセスするHTTPSサーバーはコロナウイルス(COVID-19)の日本の感染データをまとめている公開API【COVID-19 Japan Web API】のトータルデータにしたいと思います。

FingerPrintの調べ方

一度HTTPSサービスにアクセスするとフィンガープリントはクライアント側に保存されますが、どこで確認できるのでしょうか?

GoogleChromを例にして確認方法を説明したいと思います。

■まず、先ほどのAPIにアクセスしてみましょう

JSON形式の文字列が表示されます。

■GoogleChromのディベロッパーツールを開いてみてください
■SecurityのView certificateをクリックしてみてください
■詳細のタブから”拇印”を確認しましょう
16進数2桁の20組表記で表されています。
HttpClientでのアクセスにこの数字の羅列が必要になってくるのでメモしておいてください。

HttpClientでHttpsにアクセスしてデータをGETする

使用するArduinoコードはサンプルプログラム【BasicHttpsClient】を参考にしています。

先ほど、控えておいたフィンガープリントは2桁16進数20組の配列表記に直す必要があるのでちょっとめんどくさいです。

基本的には前回解説したHTTPページへのアクセスとほとんど変わりはありません。

変わっているところは例の【フィンガープリントによる認証】です。ヘッダーでいうと <WiFiClientSecureBearSSL.h>ですね。

上記の部分でclientのメンバにフィンガープリントの値を入れているのかな?と思います。

このようにすることでHTTPSのページにアクセスしてデータをGETすることが出来ます!!

という事で、HttpsにアクセスするときはESP8266HttpClientヘッダに加えて

  • アクセスしたいページのフィンガーコードを確認する
  • WiFiClientSecureBearSSLヘッダを入れて、フィンガーコードをclientオブジェクトに適応する

という事に気を付ければ、あとはHttpにアクセスする時と一緒でした~

 

コメント

タイトルとURLをコピーしました