LoginSignup
26
16

More than 5 years have passed since last update.

curlでGETするときにパラメータをいっぱい指定する

Posted at

前提

❯ curl --version
curl 7.54.0 (x86_64-apple-darwin18.0) libcurl/7.54.0 LibreSSL/2.6.4 zlib/1.2.11 nghttp2/1.24.1
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy

前置き

Web APIのテストなんかで curl コマンドをよく使うと思いますが,ページネーションなどが絡むと ?page=3&num=10 みたいにたくさんのパラメータを渡す必要がある場合があり,わりと面倒です.

curl 'example.com/contents?page=3&num=10'

まぁこれでも良いのですが, '' で囲むのを忘れるとシェルがエラー出したりします.

❯ curl example.com/contents?page=3&num=10
[1] 9757
zsh: no matches found: example.com/contents?page=3
[1]  + exit 1     curl example.com/contents?page=3

楽な指定方法

❯ curl -v -G -d page=3 -d num=10 example.com/contents
*   Trying 93.184.216.34...
* TCP_NODELAY set
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET /contents?page=3&num=10 HTTP/1.1
> Host: example.com
> User-Agent: curl/7.54.0
> Accept: */*

-G を付けるのがポイントです.通常 -d でbodyを指定するとPOSTになってしまうのですが,-Gを付けることにより強制的にGETにします.
そしてその場合-dで指定したデータは?foo=barの形式で良い感じに付けてくれるようになります.

結論

  • 自分でシェルの特殊文字をエスケープする必要がなくなる
  • パラメータの順序を入れかえたりしても?&を書き換えたりする必要がなくなる
  • 複数のパラメータを独立して指定できるのでスクリプトが書き易くなる

などの効果が得られます.たぶん.

26
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
16