前回、ESP8266からFirebaseへPOSTした。
200OKは返ってくるのだけど、JSONデータが載っていない。
HTTP/1.1 200 OK
Content-Length: 31
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache
Strict-Transport-Security: max-age=31556926; includeSubDomains; preload
まだなにか足りないのだろうか?
なんとなく、Content-Typeにcharsetを追加して見たのだが同じだった。
うーむ。
curlに--verboseを付けるとヘッダも見えるということで、やってみた。
$ curl --verbose -X POST -d ~~~
(中略)
< HTTP/1.1 200 OK
< Content-Length: 31
< Content-Type: application/json; charset=utf-8
< Cache-Control: no-cache
< Strict-Transport-Security: max-age=31556926; includeSubDomains; preload
<
* STATE: PERFORM => DONE handle 0x600057850; line 1955 (connection #0)
* multi_done
* Connection #0 to host xxxx.firebaseio.com left intact
{"name":"-KJONbf8kDuFbF5AOcVs"}
同じやん。
順番を見ると、このincludeSubDomainsのあとでユニークIDが送られてきている。
つまり、私が初回のTCP受信ですぐに切断しているのがだめなのだな。
----------
HTTP/1.1 200 OK
Content-Length: 31
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache
Strict-Transport-Security: max-age=31556926; includeSubDomains; preload
----------
{"name":"ふにふに"}
----------
はいはい、私が悪うございました。
ちゃんとContent-Length分を取得するまでは受信を止めてはいけないということだ。
かといって、データが全部来るとも限らないからタイムアウトの設定もいるだろうな。
この辺りをArduinoでやると楽なのかもしれん。
ESP8266のNon OS向けHTTPクライアントライブラリがあるといいのだけどね。
まあ、POSTするだけだったら、失敗しても気にしないということにして受信は読み捨ててしまうというのもありだとは思う。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。