curlチートシート

curlチートシート

-XでHTTPメソッドを指定します。指定するHTTPメソッドは以下の通りです。

HTTPメソッド
GET
PUT
POST
DELETE
PATCH

-dオプションに続けて文字列を指定すると、リクエストボディを渡せます。リクエストボディは文字列で渡ります。

curl -X POST -d '{"key":["aaa","bbb"]}' https://example.com/ (Linux)
curl -X POST -d "{\"key\":[\"aaa\",\"bbb\"]}" https://example.com/ (Windows)

-Iオプションでレスポンスヘッダを表示します。

curl -I -X POST https://example.com/ (Linux)

-iオプションでレスポンスヘッダ、レスポンスボディを表示します。

curl -X POST -d '{"key":["aaa","bbb"]}' https://example.com/ -i (Windows)

-Hオプションでリクエストヘッダを渡します。以下は、Host:xxx.execute-api.ap-northeast-1.amazonaws.comを渡しています。

curl -X POST -H Host:xxx.execute-api.ap-northeast-1.amazonaws.com https://example.com/ (Windows/Linux)

複数のリクエストヘッダを渡す場合は-H 'xxx: yyy' -H 'aaa: bbb'というように複数の-Hオプションを使用します。

curlでリクエストヘッダを渡す

リクエストヘッダを渡すには、-H 'Bearer hogehoge'というように-Hオプションを使用します。

curl -0 -i -X GET -H 'Authorization: Bearer hoge' https://example.com/company/1

Bearer認証:「https://qiita.com/h_tyokinuhata/items/ab8e0337085997be04b1

curlでベンチマーク(Linux)

curlで-wオプションを使用してベンチマークテストができます。

curl -X GET https://example.com/ -o /dev/null -w "%{time_total}\n"

-o /dev/nullでレスポンスボディを非表示にします。

使用できる変数は以下です。(もっといっぱいあります)

変数 意味
time_total ダウンロードが完了するまでの時間(秒)
time_starttransfer レスポンスの最初のバイトを受け取るまでの時間(秒)

curlでベンチマーク(Windows)

curlで-wオプションを使用してベンチマークテストができます。

curl -X GET https://example.com/ -o nul -w "%{time_total}\n"

Windowsの場合は-o nulでレスポンスボディを非表示にします。※nulとは

使用できる変数は以下です。(もっといっぱいあります)

変数 意味
time_total ダウンロードが完了するまでの時間(秒)
time_starttransfer レスポンスの最初のバイトを受け取るまでの時間(秒)

レスポンスボディの末尾に改行を入れる

curlコマンドで末尾に改行コードを入れるには-w "\n"とすれば改行コードが入って見やすくなります。

複数のクエリ文字列を指定する

https://example.com/?hoge1=fuga1\&hoge2=fuga2というように複数クエリ文字列を指定する場合、&を\マークエスケープしてあげる必要があります。

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になってしまいます。

curl --verbose https://~~/ > /dev/null

リクエストヘッダのContent-Typeがapplication/x-www-form-urlencodedになっているのが確認できると思います。

こちらを防ぐには-H 'Content-Type:xxx'と明示的にしているする必要があります。

HTTP1.0,HTTP1.1,HTTP2.0を指定する

curl -0オプションでHTTP1.0でリクエストを送ります。

curl –http1.1オプションでHTTP1.1でリクエストを送ります。

curl –http2オプションでHTTP2.0でリクエストを送ります。

リクエストボディをヒアドキュメントで指定する(Linux)

リクエストボディは-dオプションで指定します。続けて、@-とEOFでリクエストボディをヒアドキュメントで指定することが出来ます。

$ curl -X POST https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/v1/get -d @- <<EOF
{
  key:value
}
EOF

プロキシを使用しないでcurlを叩く

プロキシが邪魔をしてcurlコマンドが叩けない場合があります。そういった場合は--noproxyオプションでプロキシを使用しないホストを指定しておきます。

curl --noproxy localhost -X GET http://localhost:8080/~~~

Windows10のcurlでhttps://~~にcurlする

Why can't cURL properly verify a certificate on Windows?
When I try to use Curl on windows, to retrieve an https url, I get the dreaded "connection error (60)." The exact error ...

どうもWindows10のcurlではhttpsプロトコル対応していないのかと思ったのですが、URLをダブルクォートで囲むと正常動作します。

失効の関数は証明書の失効を確認できませんでした。(Windows)

「失効の関数は証明書の失効を確認できませんでした。」エラーが出た場合、-kオプションで安全でないサーバ接続を許可すれば回避できます。

curl -i -k -X POST https://~

curlコマンドで「unable to verify the first certificate」エラーを無視する」参照

SSLクライアント認証

curlでSSLクライアント認証する場合は.pemファイルを指定します。.pfxファイルは対応していないようです。

curl --cert hoge.pem ~

pfx形式の場合は以下のopensslコマンドでpem形式に変換する必要があります。

openssl pkcs12 -in ./hoge.pfx -out hoge.pem -nodes -clcerts

URLエンコード

Windows10のcurlコマンドでクエリパラメータをエンコードする例です。

-Gと--data-urlencodeオプションを使用します。

ハイフンなどもURLエンコードする必要があります。

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ともに)コピーすることが出来ます。

curlチートシート

JSON parse error: Invalid UTF-8 ~(Windows)

Windowsのcurlコマンドでリクエストボディに日本語をいれると「JSON parse error: Invalid UTF-8 start byte ~」エラーとなります。

Windowsのcurlコマンドで日本語をリクエストボディにいれたい場合はjsonファイルを用意します。

-dオプションと@でファイルを指定します。

curl -X POST -d @sample.json http://localhost:8080/hoge

sample.json

{"address":"大阪市"}

curlのPOSTでローカルファイルを送信する

curlでローカルファイルを送信するには-Fオプションを使用します。

curl -X POST -F file1=@/path/to/file.json https://~

ファイルは@ファイル名という形で指定します。

SOAP API(Linux)

curlコマンドでSOAP APIを実行する例です。postするxmlはdata.xmlファイルに格納します。

curl -X POST http://xxx.co.jp/xxx \
 -H 'Content-Type: application/xml' -d @data.xml

コメント

タイトルとURLをコピーしました