curlコマンドを使って複数パラメータを持つGETリクエストを投げる

curlコマンドを使って、複数のパラメータを持つGETリクエストを送りたい場合に注意が必要です。

例えば、http://test-server/api?param1=abc
というリクエストをコマンドラインからcurlコマンドを利用して実行しようとするとこのような感じになります。

$ curl -X GET http://test-server/api?param1=abc
レスポンス内容
・・・・

これで問題なくレスポンスがGETできます。

しかし、例えば以下のような複数のパラメータを持ったGETリクエストを送りたい場合は要注意。

$ curl -X GET http://test-server/api?param1=abc¶m2=def
[1] 26726

このようにcurlコマンドがバックエンドプロセスとして実行されてしまいます。

またその実行結果を見ると、

[1]+  Done    curl http://test-server/api?param1=abc

という出力がされており、「param2=def」が無視されていました。

よく考えると当たり前なんですが、&がURLの中に含まれていることで&までで区切られていたみたいです。
ということで、正しくは以下のように実行します。

$ curl -X GET http://test-server/api?param1=abc\¶m2=def

&をエスケープすることで複数のパラメータを持ったリクエストでも正しく送ることが可能になります。
また、URLを" "で囲っても同じ挙動になります。