はじめに
お疲れさまです。システム開発グループの早瀬です。
先日とあるツールのドキュメントを読んでいると、以下のエンドポイントを叩くと必要な情報が手に入るよという文章が書かれていました。
curl -X POST \ http://${host}:${port}/auth/realms/{realm}/protocol/openid-connect/token \ -H "Authorization: Bearer ${access_token}" \ --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" |
http://${host}:${port}/auth/realms/{realm}/protocol/openid-connect/tokenにデータをPOSTしてるのだろうというのはなんとなく想像できるのですが、
これをPostmanから叩くにはどうすれば良いのか?という所で躓いたので、個人的な備忘録として残しました。
事前準備
curlコマンドが使えるのかを確認する。
$ curl --version curl 7.64.1 (x86_64-apple-darwin19.0) libcurl/7.64.1 (SecureTransport) LibreSSL/2.8.3 zlib/1.2.11 nghttp2/1.39.2 |
curlコマンドを紐解く
さっそく遭遇したcurlコマンドを紐解いていきます。
- 1,2行目から
curl -X POST \ http://${host}:${port}/auth/realms/{realm}/protocol/openid-connect/token \ |
curlではメソッド名を指定しない場合は自動でGETメソッドになってしまうため、その他のメソッドを使用する場合は
-Xオプションを使用します。
上記の内容は、指定のURLに対してPOSTメソッドを実行しているという意味です。
(行末のバックスラッシュは改行を意味します。)
- 3行目
-H "Authorization: Bearer ${access_token}" \ |
次に
-HオプションはHTTPのRequest Headerに情報を追加する方法です。
上記の内容は、リクエストヘッダに
Authorizationをキーに
Bearer ${access_token}を入れるという意味です。
- 4行目
--data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" |
最後に
--dataオプションはPOSTする値を示しています。
上記の内容は、
grant_typeをキーに、
urn:ietf:params:oauth:grant-type:uma-ticketを入れるという意味になります。
Postmanで実行
コマンドの意味を紐解くことが出来たので、Postmanで実行します。
(波括弧で囲われた部分には適宜、必要な値を代入してください。)
- header
-
Body
しかし、エラーが発生して必要なデータの取得は出来ませんでした。
form-data と x-www-form-urlencodedの違い
結論から述べると、コンテンツタイプを
form-dataにしていたことがエラーの原因でした。
form-dataは画像などの大きなバイナリデータを送信する場合に使用するもので、
--dataで指定されたものは
x-www-form-urlencodedで送信しなければいけないそうです。
以下のように変更すると正しくデータを取得できました。
- Body
反省点
コマンドを理解するために以下のサイトを参考にしたのですが、コンテンツタイプについては記載されていませんでした。
しかし、公式サイトのドキュメントにはしっかりと記載されていました。
(HTTP MQTT) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded.
ちゃんと公式ドキュメントを確認しようというお話でした。
まとめ
- GET以外の方法でcurlを使用したい時は、 -Xオプションを使用する。
- リクエストヘッダーに情報を付与するときは -Hオプションを使用する。
- コンテンツタイプがapplication/x-www-form-urlencodedの時、ボディに情報を付与するには --dataオプションを使用する。
- 公式ドキュメントをちゃんと読もう!
この記事を書いた人
最近書いた記事
- 2023.06.09【CakePHP】Fixture Factoriesを使って増えすぎたFixtureをなんとかするお話
- 2022.12.25CakePHPを用いたバッチ開発
- 2022.03.18ブラウザはどうやってホームページにアクセスしているのか? その4
- 2022.01.28ブラウザはどうやってホームページにアクセスしているのか? その3