よく使うcurlのオプション | 瀬戸内の雲のように

よく使うcurlのオプション

Posted: 2018-09-10


スポンサーリンク

目次

背景

linux環境でAPIを使いたい時、curlコマンドを使うのが一般的なのではないでしょうか。

今回はそんなcurlでよく使うオプションをまとめました。

前提: curlとは

CLI上で実行できるHTTPクライアントです。
もう少し簡単に言うと(厳密には違いますが)、ブラウザ(FirefoxやChrome)のコマンドライン版とでも考えてもらえればと思います。

要するにWEBサーバにHTTP(S)プロトコルでアクセスし、情報を取得するためのアプリケーションです。

前提2: 本記事の前提とする環境

この記事は

  • AWS EC2
  • Amazon linux

での動作を元に記載しています。他のlinuxでは違うかもしれないのでご注意ください。

本題: curlのオプション

 

1. -k: 証明書を検証しない

httpsで接続する時のオプションです。オレオレ証明書(自己証明書)など怪しい証明書でも気にしないよ、というオプションです。

curl: (60) Peer's Certificate issuer is not recognized.
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

上記のようなエラーが出た際は、-kオプションを付けることで回避できる場合があります。
(本番環境で使うと本当に怪しいサイトにアクセスする場合があると思うので、ご注意を)

 

2. -X: メソッドを指定する

HTTPメソッドを指定するオプションです。何も指定しなければGETになります。

curl -X POST -d '{"name": "mura", "age": "30"}' http://api.test.net/users

 

3. -d: パラメータを指定する

上の例でも少し出ましたが、-dオプションによりPOSTする時にパラメータを送ることができます。
ちなみに -d で送るとペイロードとして送られるので、(URLに含めるクエリパラメータと違って)他者に見られることはありません。

curl -X POST -d '{"name": "mura", "age": "30"}' http://api.test.net/users

上記により、'{"name": "mura", "age": "30"}'というjsonをWEBサーバに送ることができます。

 

4. -L: リダイレクト応答を追従する

HTTPの応答で302 Foundのような応答、つまりリクエストされたリソースは別のURLにありますよという応答があった場合に、自動でそのURLにアクセスするという動作です。

その場合、Location:というヘッダに指示されたURLにアクセスします。

例: http://yahoo.co.jpにアクセスした場合

$ curl -D - http://yahoo.co.jp
HTTP/1.1 301 Moved Permanently
~~中略~~
Location: https://www.yahoo.co.jp/
~~後略~~

上記の場合、-Lをつけると自動でhttps://www.yahoo.co.jpにアクセスします

$ curl -L -D - http://yahoo.co.jp
HTTP/1.1 301 Moved Permanently
Date: Wed, 05 Sep 2018 23:56:05 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Location: https://www.yahoo.co.jp/
Cache-Control: private
Content-Length: 3189
Content-Type: text/html
Age: 0
Connection: keep-alive

### ↑↑ここまで http://yahoo.co.jp のレスポンス ↑↑
### ↓↓ここからhttps://yahoo.co.jpからのレスポンス(リダイレクト先)↓↓

HTTP/2 200
date: Wed, 05 Sep 2018 23:56:05 GMT
p3p: policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
vary: Accept-Encoding
expires: -1
pragma: no-cache
cache-control: private, no-cache, no-store, must-revalidate
x-xrds-location: https://open.login.yahooapis.jp/openid20/www.yahoo.co.jp/xrds
content-type: text/html; charset=UTF-8
age: 0
via: http/1.1 edge2114.img.djm.yahoo.co.jp (ApacheTrafficServer [c sSf ])
server: ATS
set-cookie: TLS=v=1.2&r=1; path=/; domain=.yahoo.co.jp; Secure

 

5. -D: 詳細なヘッダ情報を出力

通常、curlではレスポンスのbodyだけ表示されますが、デバッグの時などは詳細なヘッダが見たいものです。
そういう場合は-Dオプションを付けます。

$ curl -D -  http://localhost:8880
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Type: application/json; charset=utf-8
ETag: W/"f36519f1851e9aaeb287b605214616a1"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 169a47f0-dd0a-4e03-946a-7abb3ec16793
X-Runtime: 0.006831
Transfer-Encoding: chunke

このように、詳細なヘッダが表示されます。

なお、上記の例では-D -となっていますが、2個目のハイフンは標準出力に表示するというオプションです。
もしヘッダ情報をファイルに出力したければ、ここにファイルを指定します。


###6.  -H: ヘッダを指定する
最近ではcurlを使ってAPIを実行する場合が多いかと思いますが、ヘッダにトークンなどを設定する場合があります。
そんな時は`-H`オプションを付ければOKです。

例

$ curl -H "Authorization: Bearer 123456789abcdef" http://localhost:8880


###7. -u: ベーシック認証を行う
WEBページによくあるのがID/PWで認証するベーシック認証です。
curlではこの認証にも対応しています。

`-u "ユーザ名":"パスワード"`と指定すればOKです。

例

$ curl -u testuser:mypassword http://localhost:8880



## まとめ
以上、私がよく使うcurlのオプションです。
昔はwgetばっかり使っていましたが、APIを使うようになってcurlしか使わなくなりましたね~

スポンサーリンク




コメント一覧


コメントを投稿する


お名前


コメント内容





TOP back