curlチートシート

curlチートシート

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

HTTPメソッド
GET
PUT
POST
DELETE
PATCH

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

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

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

curl -I -X POST https://example.com/

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

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

-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/

複数のリクエストヘッダを渡す場合は-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でベンチマーク

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

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というように複数クエリ文字列を指定する場合、&を\マークエスケープしてあげる必要があります。

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 'ContentType: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 message is: curl: (60) SSL certific...

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

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://~

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

コメント

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