Amazon 初売り

« Nature Remo E lite が赤の早い点滅(クラウドに接続できていない)なのに Cloud API が使える(謎) | トップページ | SwitchBot API を使った SwitchBot 加湿器の curl コマンド(まとめ) »

2022.02.19

Windows 版 curl コマンドでパラメータとして JSON を POST する時の注意点

| |コメント (0)

 このエントリーをはてなブックマークに追加

どうも、かげさんです(^^)/
あなたがこの記事を読んでいるのは何回目でしょうか?
初めての方、いらっしゃい!
複数回目の方、再訪問ありがとです(・∀・)

これまで Windows 版の curl コマンドの操作は情報取得が中心だったので GET を使っていました。

次は JSON 形式のパラメータを指定して curl コマンドを実行したい。

実は、これまで POST を使ったことがなかったのです(;^_^A

この記事を読むと、Windows 版 curl コマンドで JSON を POST する時の注意点であるエスケープシーケンスについて分かります。

また、この記事は、下記の SwitchBot 加湿器を curl コマンドで操作する SwitchBot API の話の続きでもあります。

ここまでは GET を使うだけで良かったんだけど、SwitchBot 加湿器の電源オン/オフするには、オンかオフかをパラメータとして指定しないとイケない。

ということで、POST が必要になった。



SwitchBot 加湿器 卓上 超音波式 Alexa 大容量 3.5L 上から給水 アロマ対応 6-15畳に対応 除菌 フィルター 超静音 空焚き防止 冬乾燥対策 最大48時間連続稼働 スマート家電 スマホ操作可能 単体でEchoデバイス、Google Home、HomePod、IFTTT 、Siriに対応

SwitchBot 加湿器を On にするには、次の json 形式のパラメータが必要になります。

{"command": "turnOn","parameter": "default","commandType": "command"}

パラメータの意味は

  • コマンドは、turnOn(ほとんどのSwitchBotシリーズではturnOnは電源オンを意味する)
  • パラメータは、default(初期値)
  • コマンドタイプは、command

となっている。

Windows の curl でパラメータを記入するには、-d "パラメータ情報"とする必要がある。

しかし何も考えずに

-d "{"command": "turnOn","parameter": "default","commandType": "command"}"

として、下記のコマンドを入力してもエラーが出てしまう。
(横に長いのでスクロールしてください)

curl -X POST "https://api.switch-bot.com/v1.0/devices/dddddddddddd/commands" -H "Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -H "Content-Type: application/json" -d "{"command": "turnOn","parameter": "default","commandType": "command"}"

エラーが出てしまう原因は、くくり文字である「"」に囲まれた "~" の~部分にも " が含まれているから。

-d "{"command": "turnOn","parameter": "default","commandType": "command"}"

では

-d "{"command": "turnOn","parameter": "default","commandType": "command"}"

ダブルクォーテーションでくくられた文字として認識されるのは上行の赤文字のところです。

本来は、-d "{"command": "turnOn","parameter": "default","commandType": "command"}"

と認識してほしい。

でも、「"」 でくくられた文字の中で出てくる「"」は特殊記号(そのままだと最初の"に対応する閉じる"と判断されてしまう)

このため、途中で出てくる「"」 を「\"」にしてやる必要がある。正しくは一番外側の「”」以外は、こうなります。

-d "{\"command\": \"turnOff\",\"parameter\": \"default\",\"commandType\": \"command\"}"

\ はバックスラッシュで表示されているかもしれせんが、日本語キーボードだと¥(円マーク)です。

特殊記号の前に \ を入力する方式を「エスケープシーケンス」と言います。

正しいコマンド入力だと下記のようになります。
(横に長いのでスクロールしてください)

curl -X POST "https://api.switch-bot.com/v1.0/devices/dddddddddddd/commands" -H "Authorization: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -H "Content-Type: application/json" -d "{\"command\": \"turnOff\",\"parameter\": \"default\",\"commandType\": \"command\"}"

▼2022/02/20追記 ここから

元々、くくり文字と同じ文字が囲まれた文字に含まれているからなぁと、かげさんも予想していました。

エスケープシーケンスの問題はよくある問題だからです。

なので何も考えずにエスケープシーケンスを使ったら動いた。

一応、裏を取るためにネットで調べたらQiita(キータ)に「Windows版curlでJSONをPOSTする際に困った話」という記事を見つけました。

このQiitaの記事では、WireShark(ワイヤーシャーク)というパケットキャプチャソフトを使って原因を突き止めていました。

実は、WireShark を使う部分でも参考になりました。

ちなみにこのブログにも WireShark(ワイヤーシャーク)に関する記事があります。

コチラです。

▲2022/02/20追記 ここまで

ここまではOKだ

下記の SwitchBot 加湿器を操作するコマンドをまとめた記事はコチラ ➡「SwitchBot API を使った SwitchBot 加湿器の curl コマンド(まとめ)



SwitchBot 加湿器 卓上 超音波式 Alexa 大容量 3.5L 上から給水 アロマ対応 6-15畳に対応 除菌 フィルター 超静音 空焚き防止 冬乾燥対策 最大48時間連続稼働 スマート家電 スマホ操作可能 単体でEchoデバイス、Google Home、HomePod、IFTTT 、Siriに対応


SwitchBotスマート加湿器交換用フィルター。
フィルターは活性炭を使用して、ホコリや花粉や微小な粒子まで素早く集めて集じんします。
ご使用状況によっては、お手入れや交換が必要です。フィルターの交換は早めの半年に1回交換がおすすめです。

 このエントリーをはてなブックマークに追加

| |コメント (0)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。