日別アーカイブ: 2024年2月21日

ESPのWiFiClientSecureでサーバから情報をもらう時サーバでContentsLength指定していないと面倒

ESP8266(ESP-WROOM-02)の内容。ESP-WROOM-32ではないのでがおおよそ同じと思う。

現象

ESP8266のWiFiClientSecureでサーバからデータを取得しようとした。本来レスポンスの本体(ペイロード本文)は”[0]“を期待していたが以下の下3行のようにレスポンスが期待していたものと違う形になっていた。

Connecting to https://hoge.co.jp/api/fuga
Connected to server
Server: nginx
Date: Wed, 21 Feb 2024 05:21:47 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close

3
[0]
0

理由

これはTransfer-Encoding: chunkedになっていてペイロード本文

データ1のバイト数\r\nデータ1\r\n0\r\n

というフォーマットになっているため。長いもの送る場合は

データ1のバイト数\r\nデータ1\r\nデータ2のバイト数\r\nデータ2\r\n…データxのバイト数\r\nデータx\r\n…0\r\n

となる。なおデータのバイト数は16 進数表記。

対処

その1

対処としてそういうものとして読み込んでもよいけど、マルチバイトの場合データ1,2の間でぶった切られるのでつなげるのとか面倒。

その2

可能ならサーバ側で送る際にTransfer-Encoding: chunkedじゃなくしたい。

今回はサーバ側はpythonのBaseHTTPRequestHandlerを使っているがレスポンスにContent-Lengthをつけてやれば自動でTransfer-Encoding: chunkedじゃなくなった。「とりあえず、Content-Lengthついてないからchunkedでおくとっくわ」という仕様だったっぽい。(明示的にヘッダー付けた場合に消えるかは未確認)

http1.1の仕様的にはTransfer-Encoding: chunkedの時にはContent-Length不要らしい。

ATTinyのArduinoIDE用パッケージダウンロード先の暫定対処

2024/10/30追記

暫定対処もArduino IDEでダウンロード失敗のメッセージが出ていた。

暫定対処のダウンロード先(https://web.archive.org/web/20230504110614/http://drazzy.com/package_drazzy.com_index.json)のtar(https://web.archive.org/web/20230504110614/https://github.com/SpenceKonde/arduino-tiny-841/archive/v1.0.6.tar.gzとか)をたたくとhttps://github.com/SpenceKonde/ATTinyCoreにリダイレクトされた。Installation.mdにBoards Manager Installation用のjsonのURL書いてあるけど古いまま。現役のjsonURLは見つけていない

と思ったら、書いてあるのが現役だけど、証明書が切れてるからサイト管理者が治すの待つか手動インストールしろという事らしい。(https://github.com/SpenceKonde/ATTinyCore/issues/885)日々更新するわけではないので現役(ただいま停止中)のhttp://drazzy.com/package_drazzy.com_index.jsonに戻しておとなしく待っておく。

2024/10/30追記終了

いつの日からかArduinoIDEで追加ボードマネージャーURLに入れていたAttiny用(プロジェクトの正式名称ATTinyCore?megatinycore?)のjsonがダウンロード先の証明書が切れてつながらなくなっていた。

Some indexes could not be updated. Get "https://drazzy.com/package_drazzy.com_index.json": tls: failed to verify certificate: x509: certificate has expired or is not yet valid: : http://drazzy.com/package_drazzy.com_index.json

adafruitのgithubに以下の暫定対処先のURLダウンロード先がのっていたのでそちらに修正

https://web.archive.org/web/20230504110614/http://drazzy.com/package_drazzy.com_index.json

ArduinoIDEのprefarences->settingタブ->additional board manager urls

とりあえず暫定対処っぽいこと書いてあるけど、数か月前にfixされてそのままみたいなのでしばらくそのままかも