逆引きcurlコマンドのオプション一覧 | 瀬戸内の雲のように

逆引きcurlコマンドのオプション一覧

Posted: 2019-02-27


スポンサーリンク

目次

はじめに

APIを使う際などには無くてはならないcurlコマンド。
今回は利用シーンに応じてやりたいことから逆引きするcurlコマンドのオプション一覧を書いていきたいと思います。

関連記事: REST APIとは何か?をできる限りわかりやすく説明するために論文を読んでみた

 

大前提: curlとは

Linux等のCLI上で実行できるHTTPクライアントです。
わかりやすく言えばブラウザ(FirefoxやChrome)のコマンドライン版とでも考えてもらえればと思います。

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

 

オプション

では早速本題のオプション一覧に入っていきます。
 

POSTしたい : -X POST と -d

-X POST-d という2つのオプションを使います。

使い方はこんな感じ。

curl -X POST -d '{"name": "ken"}' https://example.com

-X POST でアクセスするメソッドをPOSTに設定するという意味です。
-d でPOSTするパラメータを設定することができます。

 

GETでパラメータを送りたい(クエリパラメータの設定)

curlのオプションではないですが、URLにパラメータを指定します。

curl -X GET https://example.com?name=ken

URLの最後に ?${パラメータ名}=${パラメータ} という書式でクエリパラメータを送ることができます。

 

リダイレクトさせたい : -L

HTTPでは 30X 応答で別のURLへの転送を指示されることをリダイレクトと言います。
curlで何もオプションを付けない場合は自動で転送しませんが、オプションを付けることでリダイレクトします。

curl -X GET -L https://example.com

 

レスポンスの結果だけを表示させたい : -s

普通にcurlを実行すると、標準エラー出力に以下のようにレスポンスの時間等が表示されます。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11330    0 11330    0     0  47210      0 --:--:-- --:--:-- --:--:-- 47405

それを避けるためには -s オプションを付けましょう

curl -s https://example.com

これで余計な表示を消して結果だけを見ることができます。

 

レスポンスをファイルに出力したい : -o

通常では実行結果として取得するHTMLは標準出力に表示されますが、ファイルに出力することもできます。

curl -o /tmp/example.html https://example.com

-o "ファイル名" というオプションを付けることで、指定したファイルに実行結果を出力 します。
また、 -o /dev/null を指定することで 表示させない ということも可能です。

 

HTTPコードだけ表示させたい

監視目的などでは実行結果として HTTPのステータスコード だけを受け取りたい場合があるかと思います。
その場合はいくつかのオプションを組み合わせることで実現できます。

以下、例です。

curl -s -o /dev/null -w "%{http_code}" https://example.com

使っているオプションは3つです。

  • -w "%{http_code}" オプションで ステータスコードを表示
  • -o /dev/null オプションで取得したHTMLを表示させない
  • -s オプションで実行時間を表示させない

これらを組み合わせることでステータスコードだけを表示させています。
ちなみに -w オプションはいろいろ使えますので後ほどご説明します。

 

HTTPのヘッダ情報を表示させたい : -D -

ステータスコード以外のより詳細なヘッダ情報を 全て 表示させる場合には -D - オプションを付けます。
末尾の -標準出力に表示する という意味です。

curl -s -o /dev/null https://example.com

結果は以下のような感じになります。(www.yahoo.co.jpの例)

HTTP/2 200
date: Mon, 25 Feb 2019 23:45:58 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
content-type: text/html; charset=UTF-8
age: 0
via: http/1.1 edge2475.img.djm.yahoo.co.jp (ApacheTrafficServer [c sSf ])
server: ATS
set-cookie: TLS=v=1.2&r=1; path=/; domain=.yahoo.co.jp; Secure

 

応答時間を測定したい

curlでレスポンスタイムを測定することでパフォーマンス監視に使うこともできます。
先程も出てきた -w オプションを使います。

curl -s -o /dev/null -w '%{time_total}' https://example.com

これで結果が秒単位で表示されます。
なお、この time_total というのはcurl実行の全ての時間という意味です。
他にもいくつかオプションがありますので別記事にまとめたいと思います。

こちらの記事にまとめました。
【curl】時間を測定するオプション一覧を調べてみた

 

オレオレ証明書(自己証明書)でもアクセスさせたい : -k

検証目的などで自己証明書などの不正な証明書を使いたい場合がたまにあります。
そんなときは -k オプションを使えばOKです。

オプションを付けない場合、以下のようにエラーになってしまう時でも、

# curl https://example.com
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オプションをつければうまくいきます。

curl -k https://example.com
# うまくいく

 

APIやWEBサイトによっては認証にcookieが必要な場合があります。
そんな時、実行結果に含まれるcookieを -c オプションで保存することができます。

curl -c cookie.txt https://example.com

上記コマンドの結果、 cookie.txt というファイルにcookieが保存されます。
保存された内容は以下のような感じです。(以下はwww.yahoo.co.jpの例)

# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

.yahoo.co.jp    TRUE    /       TRUE    0       TLS     v=1.2&r=1

 

先程の -c で保存したcookieを使ってアクセスする場合には -b というオプションを使います。

curl -b cookie.txt https://example.com

 

ベーシック認証を通したい : -u

HTTPを使った最も基本的な認証が ベーシック認証 ですが、curlでこれを通すことができます。

curl -u 'myuser' https://example.com
Enter host password for user 'myuser':   # ←パスワードを聞かれるので入力する

上記のように、 -u ユーザ名 と付ければ指定したユーザ名 でベーシック認証を受けることができます。
なお、対話的に実行したくない場合は -u ユーザ名:パスワード とパスワードまで含めることで一発で実行できます。

 

ベーシック認証を通しつつ、パスワードはハッシュ化したい : -Hを使うパターン

上記のベーシック認証を使う場合はパスワードが平文で書かれてしまいます。
これを避ける場合には、直接HTTPヘッダに設定する必要があります。

$ echo -n myuser:mypassword | openssl base64
bXl1c2VyOm15cGFzc3dvcmQ=  # ←この文字列を使う

curl -H "Authorization: Basic bXl1c2VyOm15cGFzc3dvcmQ=" https://example.com

-Hオプションは HTTPヘッダを操作する というオプションです。
ベーシック認証とは、ヘッダに Authorization: Basic "ID:PWをハッシュ化した文字列 という内容を付与することなので、
それを直接 -H オプションで設定してやることでbasic認証のオプションと同じことができます。

 

転送の速度を制限したい: --limit-rate

帯域の細い回線を使っている場合など、curlに速度制限をかけい場合があるかと思います。
そんな時は --limit-rate オプションを付ければOKです。

# 1Mbpsで帯域制限をかける
curl --limit-rate 1m https://example.com

 

まとめ

以上、自分がよく使うcurlのオプションまとめでした。
他にも便利なのがあればコメント頂ければと思います。


スポンサーリンク




コメント一覧


コメントを投稿する


お名前


コメント内容





TOP back