概要
Power Automate for desktop「Web サービスを呼び出します」アクションの詳細を展開するとデフォルトONになっている設定項目に「要求本文をエンコードします」という箇所があります。この設定をOFFにしたらうまく動いたといった情報をみかけたことがあります。
「要求本文をエンコードします」の挙動をのぞいてみました。
要求本文って何?
言語を英語に切替えてみるとRequest bodyとなっています。HTTPリクエストでPOSTメッソッド使用時に送信するBodyデータのようです。
要求本文をエンコードしますって何?
リクエスト前にURLエンコードをするオプションのようです。日本語訳が分かりにくいのでこれも英語でみておきました。
URLエンコードは受信側で誤解されないようにパーセントエンコーディングします。
例えばContent-Type: application/x-www-form-urlencoded形式でHTTPリクエストは
キーと値は「=」で連結され、複数のペアは「&」で区切られます。値の中に区切り文字「&」が混ざっていたらパーセントエンコードが必要です。
半角スペースは%20という16進数の文字エンティティに変換されます。
GETメソッドのURLエンコードと似ていますね。GETメソッドでは ?キー=値&キー=値..の形式をとりURL欄に記述します。またこのアクションのURL欄は自動でパーセントエンコーディングされるようです。
「Power Automate」と半角スペースがあいてますが%20に変換されています。
覗いてみる
実際どのような動きをしているのかFidller classicでキャプチャしてみました。
POSTメソッドでContent-Type:application/jsonでは「要求本文をエンコードします」をONにすることは無いと思われますがここでは比較のためONにしています。
説明どおりですね。
Content-Type: application/x-www-form-urlencoded形式のHTTPリクエストで使うのかなと思っていたのですが必要な「=」や「&」までエンコードされていまうため、いままで使かったことがありません。
BodyのName(Key)に全部まとまってしまいWebFormにうまく渡せません。
まとめ
「要求本文をエンコードします」の挙動をみてみました。
言葉通りパーセントエンコーディングされるのはわかりました。しかしデフォルトでなぜオンになっているのか今のところよくわかりません。Content-Type:application/jsonをエンコードすることはなさそうですし、Content-Type: application/x-www-form-urlencodeでも使ったことがないです。受信側のそうした仕様は以前多かったのでしょうか?どなたか教えてください💦
この記事は2年前から下書きになっていたので供養しました。
2024年12月22日現在も「要求本文をエンコードします」はデフォルトオンです。