curlチートシート
-XでHTTPメソッドを指定します。指定するHTTPメソッドは以下の通りです。
HTTPメソッド |
---|
GET |
PUT |
POST |
DELETE |
PATCH |
-dオプションに続けて文字列を指定すると、リクエストボディを渡せます。リクエストボディは文字列で渡ります。
1 |
curl -X POST -d '{"key":["aaa","bbb"]}' https://example.com/ |
-Iオプションでレスポンスヘッダを表示します。
1 |
curl -I -X POST https://example.com/ |
-iオプションでレスポンスヘッダ、レスポンスボディを表示します。
1 |
curl -X POST -d '{"key":["aaa","bbb"]}' https://example.com/ -i |
-Hオプションでリクエストヘッダを渡します。以下は、Host:xxx.execute-api.ap-northeast-1.amazonaws.comを渡しています。
1 |
curl -X POST -H Host:xxx.execute-api.ap-northeast-1.amazonaws.com https://example.com/ |
複数のリクエストヘッダを渡す場合は-H 'xxx: yyy' -H 'aaa: bbb'
というように複数の-Hオプションを使用します。
curlでリクエストヘッダを渡す
リクエストヘッダを渡すには、-H 'Bearer hogehoge'
というように-Hオプションを使用します。
1 |
curl -0 -i -X GET -H 'Authorization: Bearer hoge' https://example.com/company/1 |
Bearer認証:「https://qiita.com/h_tyokinuhata/items/ab8e0337085997be04b1」
curlでベンチマーク
curlで-wオプションを使用してベンチマークテストができます。
1 |
curl -X GET https://example.com/ -o /dev/null -w "%{time_total}\" |
-o /dev/null
でレスポンスボディを非表示にします。
使用できる変数は以下です。(もっといっぱいあります)
変数 | 意味 |
---|---|
time_total | ダウンロードが完了するまでの時間(秒) |
time_starttransfer | レスポンスの最初のバイトを受け取るまでの時間(秒) |
レスポンスボディの末尾に改行を入れる
curlコマンドで末尾に改行コードを入れるには-w "\n"
とすれば改行コードが入って見やすくなります。
複数のクエリ文字列を指定する
https://example.com/?hoge1=fuga1\&hoge2=fuga2というように複数クエリ文字列を指定する場合、&を\マークエスケープしてあげる必要があります。
1 |
curl -X GET https://example.com/?hoge1=fuga1&hoge2=fuga2 |
curlでリクエストヘッダ未指定にするとContent-Type:application/x-www-form-urlencodedになる
curlコマンドでリクエストヘッダを指定しない場合、Content-Type:application/x-www-form-urlencodedになってしまいます。
1 |
curl --verbose https://~~/ > /dev/null |
リクエストヘッダのContent-Typeがapplication/x-www-form-urlencodedになっているのが確認できると思います。
こちらを防ぐには-H 'ContentType:xxx'
と明示的にしているする必要があります。
HTTP1.0,HTTP1.1,HTTP2.0を指定する
curl -0オプションでHTTP1.0でリクエストを送ります。
curl –http1.1オプションでHTTP1.1でリクエストを送ります。
curl –http2オプションでHTTP2.0でリクエストを送ります。
リクエストボディをヒアドキュメントで指定する(Linux)
リクエストボディは-dオプションで指定します。続けて、@-とEOFでリクエストボディをヒアドキュメントで指定することが出来ます。
takahashi-h5$ curl -X POST https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v1/get -d @- <<EOF | |
> { | |
> key:value | |
> } | |
> EOF |
プロキシを使用しないでcurlを叩く
プロキシが邪魔をしてcurlコマンドが叩けない場合があります。そういった場合は--noproxy
オプションでプロキシを使用しないホストを指定しておきます。
1 |
curl --noproxy localhost -X GET http://localhost:8080/~~~ |
Windows10のcurlでhttps://~~にcurlする
https://superuser.com/questions/442793/why-cant-curl-properly-verify-a-certificate-on-windows
どうもWindows10のcurlではhttpsプロトコル対応していないのかと思ったのですが、URLをダブルクォートで囲むと正常動作します。
SSLクライアント認証
curlでSSLクライアント認証する場合は.pemファイルを指定します。.pfxファイルは対応していないようです。
1 |
curl --cert hoge.pem ~ |
pfx形式の場合は以下のopensslコマンドでpem形式に変換する必要があります。
1 |
openssl pkcs12 -in ./hoge.pfx -out hoge.pem -nodes -clcerts |
URLエンコード
Windows10のcurlコマンドでクエリパラメータをエンコードする例です。
-Gと--data-urlencode
オプションを使用します。
ハイフンなどもURLエンコードする必要があります。
1 |
curl -G -X GET http://localhost:8080/test --data-urlencode "hoge1-id=fuga1" --data-urlencode "hoge2-id=fuga2" |
Chrome開発者ツールからcurlコマンドをコピーする
Chromeで適当なURLにアクセスし、Chrome開発者ツールのネットワークタブからcurlコマンド(win,bashともに)コピーすることが出来ます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^